awkが受信したとき「0」入力として場合によっては異なる動作をします。コードは以下のように表示されます。
var=$1
echo ""; echo -n 'o/p of $1=$1 ==>'; echo $var | awk '$1=$1'
echo "";echo -n 'o/p of {$1=$1;print} ==>';echo $var | awk '{$1=$1;print}'
echo "";echo -n 'o/p of $1==$1 ==>';echo $var | awk '$1==$1'
echo "";echo -n 'o/p of {$1==$1;print} ==>';echo $var | awk '{$1==$1;print}'
に出力「0」(数字0):
[root@host ~]# sh /tmp/te.sh 0
o/p of $1=$1 ==>
o/p of {$1=$1;print} ==>0
o/p of $1==$1 ==>0
o/p of {$1==$1;print} ==>0
[root@GORJALA ~]#
に出力「1」(最初):
[root@host ~]# sh /tmp/te.sh 1
o/p of $1=$1 ==>1
o/p of {$1=$1;print} ==>1
o/p of $1==$1 ==>1
o/p of {$1==$1;print} ==>1
[root@host ~]#
var=0; echo $var | awk '$1=$1'
とを使用すると、なぜ違いが発生するのですかvar=1; echo $var | awk '$1=$1'
?を除くすべての数字が正常に機能します0
。
バージョン:
- GNUバッシュ、バージョン4.2.46
- GNU Awk 4.0.2
- coreutils-8.22-24.el7.x86_64
ベストアンサー1
~からGNU Awkユーザーガイド:
割り当ては式なので、割り当てられる値と同じ値を持ちます。したがって、「z = 1」は値が1の式です。
だから
echo 0 | awk '$1=$1'
このモードは0(FALSE)と評価されます。echo 1 | awk '$1=$1'
print
このモードは1(TRUE)と評価され、基本操作を実行します。