題 內部雙引號時,awk不起作用


此命令不起作用:

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

上面忽略了命令 awk。我想這可能是因為雙引號?

另外,如何在awk中添加另一組雙引號?

即:

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

我試圖逃避報價,我甚至試過這個:

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

沒有成功。


9
2017-08-20 18:13


起源




答案:


變量插值是在雙引號內執行的,所以這就是我認為可能發生的事情:當你輸入時 ssh $HOST "ls -l | awk '{print $1}'",您的shell(本地計算機上運行SSH客戶端的那個)看到了 $1 在雙引號內,並用變量的值替換它 $1,這將是空白的。它無法檢測到 $1 嵌套在雙引號內的單引號內。那麼最終發送到遠程服務器的是什麼

ls -l | awk '{print }'

這基本上相當於

ls -l | cat

即它只打印輸出 ls -l

解決方案:逃避 $ 用反斜杠,

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

17
2017-08-20 18:21



哈哈,那太簡單了!我只是看著它!這完全符合我的要求。 ssh $ HOST“ls -l | awk'{print \ $ 1 \”* \“}'”感謝一幫! - Nick