0

これら 2 つのコマンドの出力が異なるのはなぜですか?

cat config.xml|perl -ne 'print $1,"\n" if /([0-9\.]+):161/'

cat config.xml|perl -ne "print $1,"\n" if /([0-9\.]+):161/"

最初は一致したグループを期待どおりに印刷し、秒は行全体を印刷します。

4

3 に答える 3

3

二重引用符の中では、いくつかのものが置き換えられます ($variable、`command`、..)。一重引用符で囲まれている間は、そのまま残ります。

$ echo "$HOME"
/home/falsetru
$ echo '$HOME'
$HOME

$ echo "`echo 1`"
1
$ echo '`echo 1`'
`echo 1`

ネストされた引用符:

$ echo ""hello""
hello
$ echo '"hello"'
"hello"
$ echo "\"hello\""
"hello"

$同じ結果を得るには、二重引用符をエスケープします。

cat config.xml | perl -ne "print \$1,\"\n\" if /([0-9\.]+):161/"
于 2013-08-21T10:05:33.803 に答える
2

2つのこと:

  1. ネストされた引用符。
  2. 変数の展開は異なります。

最初のコマンドには、いくつかの二重引用符を含む 1 つの文字列があります。変数は展開されません

2 番目のコマンドには、引用符\nで囲まれていない 2 つの文字列があります。変数展開されます。

$1「何とか」が含まれているとしましょう

最初はこの文字列を perl に渡します:

print $1,"\n" if /([0-9\.]+):161/

2番目、これ:

print blah,\n if /([0-9\.]+):161/
于 2013-08-21T10:08:41.063 に答える