配列変数はいつ配列全体を表し、いつ「0」でインデックスされた要素を表しますか?

配列変数はいつ配列全体を表し、いつ「0」でインデックスされた要素を表しますか?

Bashのマニュアルは次のように言います:

下付き文字のない配列変数を参照することは、下付き文字がゼロの配列変数を参照するのと同じです。

0BashまたはPOSIXシェルでは、配列変数が配列全体を表す場合と?で索引付けされた要素を表す場合には、いくつかの一般的な規則があります。

例えば、

  1. declare配列変数は配列全体を表すように見えますが、パラメータ拡張ではindexの要素を表します0

    $ declare -p x
    declare -a x='([1]="b" [2]="c")'
    $ echo $x
    
  2. では配列を意味しますか、[[ -v myarr ]]それとも?myarrmyarr[0]

ベストアンサー1

私はあなたの混乱が言葉にあると思います「引用する」

あなたはしません引用する配列変数は最終的にdeclare名前を付けたものですx

変数を参照するには、$名前の前に来る必要があります。

bashのマニュアルページですべてのインスタンスを検索しreferencて読んでください。


2番目の質問は次のとおりです。

では配列を意味しますか、[[ -v myarr ]]それとも?myarrmyarr[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
$ 

おすすめ記事