これはシェルスクリプトに表示されます。
variable=${@:2}
何してるの?
var="my_value"; echo var="${var[@]:2}"; echo "$var"
違いを見ます?
これはシェルスクリプトに表示されます。
variable=${@:2}
何してるの?
var="my_value"; echo var="${var[@]:2}"; echo "$var"
違いを見ます?
回答:
$@
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
vars=( "${@:2}" )
$@
と${@}
は同じですが、後者は「より正確な」構文です。があいまいであり、したがって、同じものではないと解釈される${@:2}
ため、括弧を使用する必要$@:2
があります${@}:2
。
これksh
は、bash
およびの最近のバージョンにもある機能ですzsh
。
でksh
とbash
、あなたが使用して配列のいくつかの要素にアクセスできる${array[@]:first:length}
までに展開構文を、length
(またはすべての場合はlength
省略されている)の要素array
から始めて、配列(配列の要素のリストでは、インデックスに数値ソート)インデックスが1以上の最初のもの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]
要素${a[@]:12:2}
12〜50に展開され、(空の)要素$a[12]
と$a[13]
要素にのみ展開されます。特殊なケースとして、再度と移植性ksh93
とはbash
、zsh
また受け付ける0
第ための要素$@
とし、扱いが$0
。
したがって、3つのシェルすべて${a[@]:x:n}
で${@:x:n}
移植可能で移植できますが、スパースではない配列にのみ使用でき、IFSの値に注意してください。