Bashのマニュアルは次のように言います:
下付き文字のない配列変数を参照することは、下付き文字がゼロの配列変数を参照するのと同じです。
0
BashまたはPOSIXシェルでは、配列変数が配列全体を表す場合と?で索引付けされた要素を表す場合には、いくつかの一般的な規則があります。
例えば、
declare
配列変数は配列全体を表すように見えますが、パラメータ拡張ではindexの要素を表します0
。$ declare -p x declare -a x='([1]="b" [2]="c")' $ echo $x
- では配列を意味しますか、
[[ -v myarr ]]
それとも?myarr
myarr[0]
ベストアンサー1
私はあなたの混乱が言葉にあると思います「引用する」
あなたはしません引用する配列変数は最終的にdeclare
名前を付けたものですx
。
変数を参照するには、$
名前の前に来る必要があります。
bashのマニュアルページですべてのインスタンスを検索しreferenc
て読んでください。
2番目の質問は次のとおりです。
では配列を意味しますか、
[[ -v myarr ]]
それとも?myarr
myarr[0]
テストに合格したということはmyarr[0]
。
$ declare -p myarr
bash: declare: myarr: not found
$ myarr=()
$ declare -p myarr
declare -a myarr='()'
$ echo $myarr
$ [[ -v myarr ]] && echo is set
$ [[ -v myarr[0] ]] && echo is set
$ [[ -v myarr[1] ]] && echo is set
$ myarr+=([1]=b)
$ declare -p myarr
declare -a myarr='([1]="b")'
$ echo $myarr
$ [[ -v myarr ]] && echo is set
$ [[ -v myarr[0] ]] && echo is set
$ [[ -v myarr[1] ]] && echo is set
is set
$ myarr+=([0]=q)
$ declare -p myarr
declare -a myarr='([0]="q" [1]="b")'
$ echo $myarr
q
$ [[ -v myarr ]] && echo is set
is set
$ [[ -v myarr[0] ]] && echo is set
is set
$ [[ -v myarr[1] ]] && echo is set
is set
$