如果命令输出为空,则将默认字符串作为输出

时间:2018-06-27 18:58:33

标签: bash awk pipe

我有一个命令,该命令的输出中可能有一个空字符串,我希望在执行时要这样做:

myCommand | something 'default'

它返回myCommanddefault的输出,如果输出为空

我尝试过myCommand |awk '{if(\$0==""){print "default"}}',但它并不总是有效。

3 个答案:

答案 0 :(得分:3)

自从您提到awk以来,这是一种方法。

注意,这用于输出,即,如果myCommand根本不输出任何内容,则打印默认值。如果您要处理输出空白行的程序,则有所不同。

myCommand | awk -v def="default" '{print} END { if(NR==0) {print def} }'

{print}使每条输入线通过。最后(END{...}),NR是输入记录的数量,即从myCommand收到的行数。如果myCommand没有打印输出,则该值为0。如果是这样,请打印def在命令行中由-v def="whatever text you want"分配的值。

测试:

$ awk -v def="default" '{print} END {if(NR==0) {print def}}' </dev/null
default
$ awk -v def="default" '{print} END {if(NR==0) {print def}}' <<<'foo'
foo

答案 1 :(得分:1)

echo foo | sed 's/^$/default/'

输出:

foo

echo | sed 's/^$/default/'

输出:

default

答案 2 :(得分:1)

您可以通过以下方式错过空行

myCommand | grep . || echo 'default'

,所以您可能希望使用@BenjaminW的评论。 :

var=$(myCommand)
echo "${var:-default}"