設定される配列の定義は bash マニュアルから得られます。
下付き文字が割り当てられている場合、配列変数は設定されたと見なされます。空の文字列は有効な値です。
これは、配列要素の数がゼロより大きい場合にのみ配列が設定されることを意味しますか?
以下の配列はセットですか
myarr=()
?マニュアルにも記載されています。
パラメータに値が割り当てられている場合は、パラメータが設定されます。空の文字列は有効な値です。
配列もパラメータなので、配列セットの定義はパラメータセットの定義とどのように一致しますか?
たとえば
myvar=""
設定されていますが、myarr=()
設定されていますか?値が割り当てられましたmyarr
。 nullですか?
設定配列の定義が異なります。https://unix.stackexchange.com/a/246703/674
yash と zsh を除いて配列をサポートするシェルの場合、インデックス 0 の要素が設定されていない限り、配列変数が設定されているとは報告されません。
bash(ksh93またはzshを除く)の場合、キーが「0」の要素が設定されていない場合、連想配列型の変数は設定されたと報告されません。
0
Bashのマニュアルによると、サブスクリプションのない配列名は実際には配列全体ではなくインデックス/キーでインデックス付けされた要素を参照しているため、この定義は正しくありませんか?下付き文字のない配列変数を参照することは、下付き文字がゼロの配列変数を参照するのと同じです。
0
もしそうなら、この定義は実際には配列が設定されるのではなく、設定されたインデックス/キーによってインデックス付けされた要素のものですか?たとえば、およびは、
${myarr+1}
配列[[ -v myarr ]]
アプリケーションでmyarr
変数/パラメータが設定されているかどうかをテストする一般的な方法です。myarr
つまり、またはmyarr[0]
完全な配列ですかmyarr
?設定されるシェル配列のPOSIX定義は何ですか?
答え1
- これは、配列要素の数がゼロより大きい場合にのみ配列が設定されることを意味しますか?
はい。
- 次の配列は集合myarr =()ですか?
いいえ。
- 集合配列の定義は集合パラメーターの定義とどのように一致しますか?
どちらも同じです。ここには問題ないと思います。
パラメータに値が割り当てられている場合は、パラメータが設定されます。空の文字列は有効な値です。
...に値が割り当てられている場合、配列変数は設定されたと見なされます。空の文字列は有効な値です。
- 定義はさまざまです...
答えは何ですかhttps://unix.stackexchange.com/a/246703/674テストの仕組みの詳細を説明します[ -n "${var+set}" ]
。設定するかどうかを定義せず、通常の変数には適用せず、配列には適用しません。
that
にご注意くださいthat would not report ...
。
- 設定されるシェル配列のPOSIX定義は何ですか?
POSIXには「シェル配列」はありません。