これはシェルスクリプトで確認できます。
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
参照
コメント
- 示されている手法では、指定された引数が1つにマッシュアップされることに注意してください。ストリング。それらを個別の引数として保持する必要がある場合は、配列を使用してください:
vars=( "${@:2}" )
- @ glennjackman-指摘していただきありがとうございます。
- 中括弧の使用に注意してください。常に中括弧を使用することになっていますが、コンテキストが明確な場合、Bashでは中括弧を省略できます。したがって、
$@
と${@}
は同じですが、後者の方が"より正確です"構文。$@:2
はあいまいであり、${@}:2
<と解釈されるため、${@:2}
では角かっこを使用する必要があります。 / div>、これは同じではありません。
回答
That “sa ksh
機能はbash
および最近のバージョンのzsh
にもあります。
ksh
およびbash
では、${array[@]:first:length}
構文を使用して、配列のいくつかの要素にアクセスできます。 length
(または、length
が省略されている場合はすべて)要素まで、array
の要素に展開されます。配列(インデックスで数値的にソートされた配列の要素のリスト内)。インデックスがfirst
以上の最初の配列から始まります。スカラーコンテキストの場合(ここのようにスカラー変数への割り当て)要素のリストはスペースchで結合されます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]
と要素。特別な場合として、またksh93
とbash
との移植性のために、zsh
も受け入れます0
の$@
の最初の要素であり、それを$0
として扱います。
したがって、${a[@]:x:n}
と${@:x:n}
を3つのシェルすべてに移植可能に使用できますが、スパースでない配列にのみ使用できます。 IFSの値。
コメント
- 配列のインデックス構文を説明していただきありがとうございます
var="my_value"; echo var="${var[@]:2}"; echo "$var"
違いがわかりますか?