![在终端中使用 sh -c](https://linux22.com/image/1332902/%E5%9C%A8%E7%BB%88%E7%AB%AF%E4%B8%AD%E4%BD%BF%E7%94%A8%20sh%20-c.png)
我有这个命令行,我输入到终端,它按预期工作:
dscl . -readall /Users UniqueID | awk '/^RecordName:/ {name=$2}; /^UniqueID: / {if ($2 > 500) print name}'
我想要做的是使用 sh -c“在此处插入命令字符串”,当我尝试使用上述语句时,它会给出以下错误:
awk: syntax error at source line 1
context is
/^RecordName:/ >>> {name=} <<<
awk: illegal statement at source line 1
awk: illegal statement at source line 1
知道如何纠正这个问题吗?我需要它来编写 Objective-C 程序。
答案1
单引号不会阻止双引号内的变量扩展:
$ echo "a'$RANDOM'"
a'23976'
您可以$
用\$
或'
替换'\''
:
$ sh -c "echo a b | awk '{print \$2}'"
b
$ sh -c 'echo a b | awk '\''{print $2}'\'
b
或者使用 heredoc:
sh -s <<'END'
echo a b | awk '{print $2}'
END
答案2
您的awk
命令没有结束'
。