わかりました、簡単に言うと、ここにコードがあります。読みやすいようにコードを少しフォーマットしました。
awk '{
t=$0 ;
$0=t ; $0=// ; print "$0=// ; value of $0 is ",$0
$0=t ; $0=/./ ; print "$0=/./ ; value of $0 is ",$0
$0=t ; $0=/*/ ; print "$0=/*/ ; value of $0 is ",$0
$0=t ; $0=/**/ ; print "$0=/**/ ; value of $0 is ",$0
$0=t ; $0=/[0-9]/ ; print "$0=/[0-9]/ ; value of $0 is ",$0
$0=t ; $0=/[a-z]/ ; print "$0=/[a-z]/ ; value of $0 is ",$0
$0=t ; $0=/[0-9][a-z]/ ; print "$0=/[0-9][a-z]/ ; value of $0 is ",$0
$0=t ; $0=/5/ ; print "$0=/5/ ; value of $0 is ",$0
$0=t ; $0=/55/ ; print "$0=/55/ ; value of $0 is ",$0
$0=t ; $0=/x/ ; print "$0=/x/ ; value of $0 is ",$0
$0=t ; $0=/5x/ ; print "$0=/5x/ ; value of $0 is ",$0
$0=t ; $0=/x5/ ; print "$0=/x5/ ; value of $0 is ",$0
$0=t ; $0=/xoo/ ; print "$0=/xoo/ ; value of $0 is ",$0
$0=t ; $0=/500/ ; print "$0=/500/ ; value of $0 is ",$0
}'<<<"5x"
私はこの出力を得ました:
$0=// ; value of $0 is 1
$0=/./ ; value of $0 is 1
$0=/*/ ; value of $0 is 0
$0=/**/ ; value of $0 is 1
$0=/[0-9]/ ; value of $0 is 1
$0=/[a-z]/ ; value of $0 is 1
$0=/[0-9][a-z]/ ; value of $0 is 1
$0=/5/ ; value of $0 is 1
$0=/55/ ; value of $0 is 0
$0=/x/ ; value of $0 is 1
$0=/5x/ ; value of $0 is 1
$0=/x5/ ; value of $0 is 0
$0=/xoo/ ; value of $0 is 0
$0=/500/ ; value of $0 is 0
なぜこの出力が得られたのか理解できません。awk は代入ステートメントについて文句を言うだろうと思っていましたが、そうではありませんでした$0=/xxx/
。つまり、?$0=/pattern/
と同じです。$0=$0~/pattern/
次に、このテストを行いました:
kent$ echo "xx"|awk '{y="777";y=/x/;print y}'
1
kent$ echo "xx"|awk '{y="777";y=/7/;print y}'
0
ようです、foo=/pattern/
と同じですfoo=$0~/pattern/
しかし、よくわかりません...ドキュメント/マニュアルページで情報が見つかりません。
ここ@ SOでawkの質問に答えていたときに見つけました。
awkでテストしました:
kent$ awk --version|head -1
GNU Awk 4.1.0, API: 1.0 (GNU MPFR 3.1.2, GNU MP 5.1.2)
誰かが私を説明してくれれば幸いです。前もって感謝します。
編集
さらにテストを行った後、(ドキュメントで見つけられ {...}
なかったので、わかりません)が判明し/pattern/
まし$0~/pattern/
た。だから私たちはできる:{...}
/patter/{do something}
kent$ echo "xx"|awk '{if(/x/)print "ok"}'
ok
それが awk スクリプト構文の標準機能かどうかはわかりません。そして、それがすべての awk 実装で機能する場合。私はまだマニュアルとマニュアルページを探しています...