Bash 命令在 bash -c 时失败,但在交互式 shell 中工作



我有一个相当简单的命令,当在bash中运行时,将剩余的磁盘空间输出到stdout

echo -n "External1TB: $(grep -Poi '(/mnt/External1TBs+)K(.*)' <(df -H --output=target,avail))B"

我正在使用进程重定向<()df的输出通过管道传输到grep,然后处理输出并过滤掉剩余的空间。所有这些都被包装在一个子壳$()中,并馈送到echo这样我就可以在输出前面加上磁盘名称。

示例输出:External1TB: 882GB

在交互式 bash shell 中运行时,它运行得很好,但是如果我尝试使用bash -c运行它,如下所示:

bash -c "echo -n "External1TB: $(grep -Poi '(/mnt/External1TBs+)K(.*)' <(df -H --output=target,avail))B"",

输出始终为:External1TB:。似乎grepdf由于某种原因而失败。

我做错了什么?

您需要对内部部分进行转义:

bash -c "echo -n "External1TB: $(grep -Poi '(/mnt/External1TBs+)K(.*)' <(df -H --output=target,avail))B"",

或者,考虑至少将其部分放入函数或脚本中,这样就不需要在字符串转义时堆叠字符串转义。

最新更新