
シェルスクリプトでこれを見たことがあります。
variable=${@:2}
何をしていますか?
答え1
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
引用する
答え2
最新バージョンですksh
。bash
zsh
ksh
および では、次の構文を使用して配列の複数の要素にアクセスbash
できます。この構文は、より大きいか等しい最初のインデックスから始まり(インデックスごとに数字でソートされた配列要素のリスト内の)すべての配列要素に展開(または省略)します。スカラーコンテキスト(ここではスカラー変数への代入など)では、要素リストの前にはスペース文字が続き、andの最初の文字(空の場合は何も設定されていない場合は空白)の前には が付きます。${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
別の変数型として連想配列を持つ)、ゼロではなくインデックス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に拡張され(null)、要素${a[@]:12:2}
のみに拡張されます。特別なケースとの移植性を再説明するために、最初の要素を受け入れて処理します。$a[12]
$a[13]
ksh93
bash
zsh
0
$@
$0
したがって、3つのシェルすべてで使用し${a[@]:x:n}
て${@:x:n}
移植することができますが、非疎配列にのみ適用され、IFS値に注意してください。