は私bashscriptでのawkを使用すると、この行は明らかに動作しません:それは取得しないようエスケープドル記号
line="foo bar"
echo $line | awk '{print $1}'
がどのように私は、$1
をエスケープしますスクリプトの最初の引数に置き換えられますか? (awkスクリプトの周りの単一引用符付き)
は私bashscriptでのawkを使用すると、この行は明らかに動作しません:それは取得しないようエスケープドル記号
line="foo bar"
echo $line | awk '{print $1}'
がどのように私は、$1
をエスケープしますスクリプトの最初の引数に置き換えられますか? (awkスクリプトの周りの単一引用符付き)
スクリプトが期待通りに動作します:
$ cat script-single
#!/bin/bash
line="foo bar"
echo $line | awk '{print $1}'
$ ./script-single test
foo
次のように、しかし、ますブレーク(スクリプトは出力空行):
$ cat script-double
#!/bin/bash
line="foo bar"
echo $line | awk "{print $1}"
$ ./script-double test
awk
プログラムの二重引用符に注意してください。
二重引用符が$1
変数を展開するため、awkコマンドはawk変数test
(空)の内容を出力するスクリプト{print test}
を取得します。ここに示したスクリプトだこと:
$ cat script-var
#!/bin/bash
line="foo bar"
echo $line | awk -v test=baz "{print $1}"
$ ./script-var test
baz
として、現在書かれ、$ 1は置き換えられません(それは単一引用符で囲まれた文字列の中なので、bashがそれを解析しません)
あなたはawk "{print $1}"
書いた場合、bashは変数展開ルールは、最も外側のLに依存していることを二重引用符で囲まれた文字列の中
注意を$1
を拡大していきます引用のevelので、"awk '{print $1}'"
の$1
は拡大されます
それは置き換えられません。これは '' $ line "'の最初の単語になります。 – user000001
'awk'"プログラム "の一重引用符の目的は、bashがパラメータの拡張を行わないようにすることです。期待される。 –
@CostiCiudatu言葉が拡張されています – SheetJS