我有一个占位符文件,并且只有在输出不是零长度时才想用命令输出覆盖它。我想我可以FOO="$(command)"
然后[-z $FOO]
。还有更好的方法吗?
答案 0 :(得分:1)
如果您不需要输出命令,可以直接运行:[ -z "$(command)" ]
。例如,以下打印“空”:
#!/bin/sh
if [ -z "$(echo -n)" ]; then
echo "empty"
fi
答案 1 :(得分:1)
有不同的方式,但我不知道“更好”。您可以阻止读取,只有在某些数据通过后才设置重定向:
cmd | { read j && { echo "$j"; cat; } > placeholder; }
(注意,如果您的命令生成输出但没有换行符,则会忽略数据。)
答案 2 :(得分:0)
-z
的示例可以使用,但您也可以使用
[ "$var" ]
因此,一个简单的解决方案可能如下所示:
#!/bin/sh
output="$( command )"
[ "$output" ] && echo "$output" > your_file.txt
答案 3 :(得分:0)
如果你要做很多这样的事情,最好做一个功能:
write_if_non_zero(){
local msg=$1
local file=$2
if [[ ! -z "$msg" ]]; then
echo "$msg" > "$file"
fi
}
然后
write_if_non_zero "$FOO" "$FILE"