双引号内的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"

没有成功。

Answers:


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 \” * \“}'”“谢谢!
尼克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.