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

これはシェルスクリプトで確認できます。

variable=${@:2} 

それは何をしているのですか?

コメント

  • それはスクリプトで正確に示されていましたか?構文は配列のように見えますが、いくつかの部分が欠けています。スクリプトからこの行の周りに数行を投稿していただけますか?
  • これは、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 

参照

コメント

  • 示されている手法では、指定された引数が1つにマッシュアップされることに注意してください。ストリング。それらを個別の引数として保持する必要がある場合は、配列を使用してください:vars=( "${@:2}" )
  • @ glennjackman-指摘していただきありがとうございます。
  • 中括弧の使用に注意してください。常に中括弧を使用することになっていますが、コンテキストが明確な場合、Bashでは中括弧を省略できます。したがって、$@${@}は同じですが、後者の方が"より正確です"構文。 $@:2はあいまいであり、${@}:2<と解釈されるため、${@:2}では角かっこを使用する必要があります。 / div>、これは同じではありません。

回答

That “sa ksh機能はbashおよび最近のバージョンのzshにもあります。

kshおよびbashでは、${array[@]:first:length}構文を使用して、配列のいくつかの要素にアクセスできます。 length(または、lengthが省略されている場合はすべて)要素まで、arrayの要素に展開されます。配列(インデックスで数値的にソートされた配列の要素のリスト内)。インデックスがfirst以上の最初の配列から始まります。スカラーコンテキストの場合(ここのようにスカラー変数への割り当て)要素のリストはスペースchで結合されますbashksh93を持ち、最初の文字が$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では、わずかに異なります。zshksh互換性のために最近構文が設定されていますが、要素の範囲を選択するための独自の構文があります。

kshおよびbashzsh配列はスカラー変数とは異なる変数タイプであり、スパースではありません(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]と要素。特別な場合として、またksh93bashとの移植性のために、zshも受け入れます0$@の最初の要素であり、それを$0として扱います。

したがって、${a[@]:x:n}${@:x:n}を3つのシェルすべてに移植可能に使用できますが、スパースでない配列にのみ使用できます。 IFSの値。

コメント

  • 配列のインデックス構文を説明していただきありがとうございます

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です