在子Shell中的变量中使用引号

3
这里我遇到了一个奇怪的问题:我有一个脚本试图通过eval构建一组命令,并且这些命令需要在子shell中运行作为其他命令的一部分(以便可以异步运行它们)。这些命令包括引号来保护值,例如包含空格等。但是它们被视为没有引号。

例如:

cmd="echo 'Foo Bar'"
$(eval "$cmd" | sort) &

执行时出现错误:"Foo: command not found"

直接运行则正常,如下所示:

eval "$cmd" | sort

我知道这个例子并不是很有趣,但是我不理解为什么引号会丢失,以及如何避免它,同时还能在一个合适的子shell中执行(无论是否在后台处理)。

1个回答

5

您需要去掉$$(eval "$cmd" | sort) &会导致bash尝试执行命令替换的输出。

请改为使用(eval "$cmd" | sort) &


啊,我明白问题了;所以命令执行得很好,只是将回显字符串倒入后台任务中,而不是在后台自己运行,我想我现在懂了,谢谢! - Haravikk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接