我在编写脚本时发现了一些异常。
以下示例按预期工作:
$ echo 123 | awk '{print $1 456}'
123456
$ sh -c "echo 123 | awk '{print $1}'"
123
但下面的例子却没有:
$ sh -c "echo 123 | awk '{print $1 456}'"
456
我期望使用附加字符串打印第一列,该字符串应该123456
像运行不带 .txt 的相同命令时一样返回sh -c
。但正在发生的事情是,由于某种原因,第一列被忽略了。有趣的是,$1
在不执行字符串连接时打印没有问题。
为什么会发生这种情况以及如何在传递到单独的 shell 实例的命令中进行字符串连接?
答案1
您必须逃脱$
标志:
$ sh -c "echo 123 | awk '{print \$1 456}'"
123456
否则,$1
由当前 shell 扩展。