命令失败,通过' bash -c'但直接工作

时间:2015-11-17 14:27:26

标签: linux bash shell awk

该命令通过bash -c失败:

bash -c 'sudo lspci -vvv | awk \'/System peripheral/ {portn=$1} /Status:/ {split($3,a,"M");printf "%s\n",a[1]}\''

-bash:意外令牌附近的语法错误`('

如果直接在控制台sudo lspci -vvv | awk '/System peripheral/ {portn=$1} /Status:/ {split($3,a,"M");printf "%s\n",a[1]}'

中运行,同样的命令也可以正常运行

如何覆盖'('在命令字符串中为bash -c?

1 个答案:

答案 0 :(得分:3)

你不能用单引号转义单引号。它不起作用。

您的命令被视为

sudo lspci -vvv | awk /System peripheral/ {portn=$1} /Status:/ {split($3,a,"M");printf "%s\n",a[1]}

失败了。

要在单个引号字符串中放置单引号,您需要使用'\''

所以你的命令变为:

bash -c 'sudo lspci -vvv | awk '\''/System peripheral/ {portn=$1} /Status:/ {split($3,a,"M");printf "%s\n",a[1]}'\'