次のbash変数がある場合:
$ echo "${pos}"
201
719
744
205
354
...次のような結果が出ます...
!#bin/bash
(
IFS=:
awk -v str2="$pos" -v sep="[$IFS]" '
BEGIN {
m = split(str2, b, sep)
for (i=1; i<=m; ++i) {print b[i]}
}
'
)
-----------------
$ ./myscript.sh
201
719
744
205
354
...しかし、そうする...
(
IFS=:
awk -v str2="$pos" -v sep="[$IFS]" '
BEGIN {
m = split(str2, b, sep)
for (i=1; i<=m; ++i) {print b[i]+10}
}
'
)
------
./myscript.sh
211
...それで、アドインは機能しますが、すべての要素の結果を印刷するわけではありません。なぜできないの?
答え1
これはIFS =:設定が正しくありません。したがって、Split()は配列を値で埋めるのではなく、str2の1つの値で埋めます。したがって、forループでb [i]を印刷しますが、実際にはstr2全体であるb [1]を一度印刷します。新しい行では配列 b のメンバを印刷すると思いますが、 Split() の retrn 値を確認すると 1 です。 IFS=: を削除すると、スクリプトは正常に機能します。