これはシェルスクリプトで見ます。
variable=${@:2}
何してるの?
Bashの特殊変数$@
の内容を示しています。これにはすべてのコマンドライン引数が含まれており、このコマンドは2番目の引数からすべての引数を取得して変数variable
に格納します。
これが試験的なスクリプトです。
#!/bin/bash
echo ${@:2}
variable=${@:3}
echo $variable
実行例:
./ex.bash 1 2 3 4 5
2 3 4 5
3 4 5
これはksh
機能であり、bash
と最近のバージョンのzsh
にも含まれています。
ksh
およびbash
では、${array[@]:first:length}
構文を使用して配列の複数の要素にアクセスできます。これは、最大length
(またはlength
省略されます)array
配列の要素(インデックスで数値的にソートされた配列の要素のリスト内)。インデックスがfirst
以上の最初の要素から始まります。スカラーコンテキスト(ここではスカラー変数への割り当てのように)の場合、要素のリストは、bash
およびksh93
を含むスペース文字と、$IFS
の最初の文字(または$IFS
が空またはスペースの場合は何もない)で結合されます。設定されていません)zsh
。
例えば:
$ a[23]=a a[5]=b a[235]=c a[45]=d
$ x=${a[@]:12:2}; printf '<%s>\n' "$x"
<a d>
$@
は特殊なケースです。 $@
は、位置パラメータ($1
、$2
...)の配列です。ただし、:
とともに使用すると、$0
も含まれます。したがって、${@:1}
は$@
と同じであり、他の配列のような${@:0}
ではありません。
zsh
では、少し異なります。 zsh
は互換性のために最近ksh
構文を追加しましたが、要素の範囲を選択するための独自の構文があります。
ksh
およびbash
とは対照的に、zsh
配列はスカラー変数とは異なる変数型であり、スパースではありません(zsh
には別の変数型として連想配列があります)そして、0ではなくインデックス1から開始します。
zsh
の場合は、$a[first,last]
を使用して配列要素の範囲にアクセスします(last
を負にして、末尾から逆方向にカウントすることもできます)。
zsh
では、
a[23]=a a[5]=b a[235]=c a[45]=d
235の要素を持つ配列を作成します。ほとんどの要素は空です。 $a[12,50]
は要素12〜50に展開され、${a[@]:12:2}
は(空の)$a[12]
および$a[13]
要素にのみ展開されます。特殊なケースとして、またksh93
およびbash
との移植性のために、zsh
は0
の$@
最初の要素も受け入れ、それを$0
として扱います。
したがって、3つのシェルすべてで移植性のある${a[@]:x:n}
および${@:x:n}
を使用できますが、これはスパースでない配列に対してのみであり、IFSの値に注意してください。