0

gawk で特定のタイプの配列サブスクリプションの説明を探してみました。

arr[tog = ! tog, 0] = i

しかし、Google に入力する適切な検索用語が見つからないようです。その行を取得した完全なコードは、ここにあります: http://lawker.googlecode.com/svn/fridge/lib/awk/levenshtein.awk

誰がそれが何をするのか教えてもらえますか? ブール値フラグtogをその反転に割り当て、割り当ての結果を配列インデックスとして使用していますか?

4

1 に答える 1

1

括弧内のものは算術コンテキストで評価されるため (これがどこに文書化されているかわかりません)、これは変数 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
于 2013-06-27T11:45:43.607 に答える