${@:2} はシェルスクリプトで何を意味しますか?

${@:2} はシェルスクリプトで何を意味しますか?

シェルスクリプトでこれを見たことがあります。

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

最新バージョンですkshbashzsh

kshおよび では、次の構文を使用して配列の複数の要素にアクセスbashできます。この構文は、より大きいか等しい最初のインデックスから始まり(インデックスごとに数字でソートされた配列要素のリスト内の)すべての配列要素に展開(または省略)します。スカラーコンテキスト(ここではスカラー変数への代入など)では、要素リストの前にはスペース文字が続き、andの最初の文字(空の場合は何も設定されていない場合は空白)の前には が付きます。${array[@]:first:length}lengthlengtharrayfirstbashksh93$IFS$IFSzsh

たとえば、

$ 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]ksh93bashzsh0$@$0

したがって、3つのシェルすべてで使用し${a[@]:x:n}${@:x:n}移植することができますが、非疎配列にのみ適用され、IFS値に注意してください。

関連情報