单引号引用的bash命令

时间:2013-10-06 23:10:10

标签: bash awk grep kill

我需要通过字符串匹配找到进程,并且杀死它,需要在另一个脚本文件中的一行中执行: 这是我试过的:

'kill $(ps -ef|grep xxx|grep -v grep | awk '{print $2 }' )'
"kill $(ps -ef|grep xxx|grep -v grep | awk '{print $2 }' )"

第一个因为嵌套的单引号而无效,第二个不起作用,因为父脚本将$ 2作为父脚本的参数2。 我该怎么做?

1 个答案:

答案 0 :(得分:3)

完成该任务的最简单方法是:

pkill xxx

(你可以在包procps的debian / ubuntu世界中找到它,如果你没有安装它。)你可能需要使用pkill -f xxx,这取决于xxx是否是部分进程名称或参数,通常是脚本执行的情况。

但是,要回答关于shell引用的更一般的问题,如果需要传递字符串

kill $(ps aux | grep xxx | grep -v grep | awk '{print $2}')

作为参数,您需要使用反斜杠转义:

bash -c "kill \$(ps aux | grep xxx | grep -v grep | awk '{print \$2}')"

或者,您可以将几个带引号的字符串粘贴在一起:

bash -c 'kill $(ps aux | grep xxx | grep -v grep | awk '"'"'{print $2}'"'"')'

就我个人而言,我发现第一个更具可读性但是YMMV。

你只能反斜杠转义双引号字符串中的几个字符:$"\,换行符和反引号;在单引号字符串内反斜杠只是反斜杠。但是,这足以让你输入任何东西。