我有一个相当简单的命令,当在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:
。似乎grep
或df
由于某种原因而失败。
我做错了什么?
您需要对内部部分进行转义:
bash -c "echo -n "External1TB: $(grep -Poi '(/mnt/External1TBs+)K(.*)' <(df -H --output=target,avail))B"",
或者,考虑至少将其部分放入函数或脚本中,这样就不需要在字符串转义时堆叠字符串转义。