awk 在双引号内不起作用

Nic*_*ick 11 linux shell awk

此命令不起作用:

ssh $HOST "ls -l | awk '{print $1}'"`
Run Code Online (Sandbox Code Playgroud)

以上忽略命令awk。我想这可能是因为双引号?

另外,如何在 awk 中添加另一组双引号?

IE:

ssh $HOST "awk '{print $1 "*"}' /some_file"
Run Code Online (Sandbox Code Playgroud)

我试过转义引号,我什至试过这个:

ssh $HOST "awk '{print $1 "\""*"\""}' /some_file"
Run Code Online (Sandbox Code Playgroud)

没有成功。

Dav*_*d Z 19

变量替换双引号中进行的,所以这里就是我想可能发生的:当你输入ssh $HOST "ls -l | awk '{print $1}'",你的shell(在本地计算机上的一个,在那里你正在运行SSH客户端)看到$1的双引号和替换它与内变量的值,该值$1将为空。它无法检测到$1嵌套在双引号内的单引号内。所以最终被发送到远程服务器的是

ls -l | awk '{print }'
Run Code Online (Sandbox Code Playgroud)

这基本上相当于

ls -l | cat
Run Code Online (Sandbox Code Playgroud)

即它只是打印输出ls -l.

解决方案:$用反斜杠转义,

ssh $HOST "ls -l | awk '{print \$1}'"
Run Code Online (Sandbox Code Playgroud)