二重引用符内ではawkは機能しません


11

このコマンドは機能しません:

ssh $HOST "ls -l | awk '{print $1}'"`

上記はコマンドを無視しawkます。二重引用符が原因であると思いますか?

また、awk内に二重引用符の別のセットを追加するにはどうすればよいですか?

つまり:

ssh $HOST "awk '{print $1 "*"}' /some_file"

私は引用符をエスケープしてみました、これも試しました:

ssh $HOST "awk '{print $1 "\""*"\""}' /some_file"

成功なし。

回答:


19

変数の補間は二重引用符内で実行されるので、ここで私が考えていることは次のとおりです。と入力するssh $HOST "ls -l | awk '{print $1}'"と、シェル(SSHクライアントを実行しているローカルコンピューター上のシェル)が$1二重引用符内に表示され、それが変数の値$1。これは空白になります。$1が二重引用符内の単一引用符内にネストされていることを検出できません。したがって、リモートサーバーに送信されることになるのは

ls -l | awk '{print }'

基本的には

ls -l | cat

つまり、の出力を出力するだけですls -l

解決策:$バックスラッシュでエスケープします。

ssh $HOST "ls -l | awk '{print \$1}'"

はは、とても簡単でした!私はちょうどそれをよく見ました!これはまさに私が欲しかったことです。ssh $ HOST "ls -l | awk '{print \ $ 1 \" * \ "}'"ありがとうございます!
Nick、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.