括弧内のものは算術コンテキストで評価されるため (これがどこに文書化されているかわかりません)、これは変数 tog のブール値を反転し、toga[0]="i"
の値に関係なく設定します:
$ tog=0
$ arr[tog = ! tog, 0]=i
$ echo $tog; echo "${!arr[@]}"
1
0
$ arr[tog = ! tog, 0]=i
$ echo $tog; echo "${!arr[@]}"
0
0
したがって、配列インデックス 0 のみが存在します。
おっと、それは完全に間違っていました。これがガウクの質問だとは思いませんでした。
gawk は実際には多次元配列を持つことはできませんが、カンマ区切りのキーでそれらを偽造することができます。コンマで区切られた要素は、SUBSEP 変数を使用して 1 つの文字列に結合されます。
gawk '
function do_toggle(i) {
arr[tog = ! tog, 0] = i
print "after toggling:"
print tog
for (idx in arr) print "arr["idx"]="arr[idx]
}
BEGIN {
SUBSEP=":"
tog=0
do_toggle(5)
do_toggle(10)
}
'
after toggling:
1
arr[1:0]=5
after toggling:
0
arr[1:0]=5
arr[0:0]=10