是否可以在条件为false的情况下从命令输出中设置变量,如果没有为变量赋值,则为
。如果我将变量设置为没有返回的grep,然后测试:
test=$(echo hello | grep 'helo')
if [[ ! -z $test ]]; then
echo "is set"
else
echo "not set"
fi
输出:未设置(这是预期的)
但是我试图把它全部写成这样一句话:
test=
if [[ ! -z test=$(echo hello | grep 'helo') ]]; then
echo "is set"
else
echo "not set"
fi
输出:"设置" (预计未设定)
答案 0 :(得分:3)
grep
会返回成功,因此您可以执行以下操作:
if test=$(echo hello | grep 'helo')
then
echo "Match: $test"
else
echo "No match"
fi
如果您运行的东西没有通过退出代码区分,您可以在同一行分配和签入两个语句:
if var=$(cat) && [[ -n $var ]]
then
echo "You successfully piped in some data."
else
echo "Error or eof without data on stdin."
fi
(或;
代替&&
,如果您想检查结果,即使命令报告失败也是如此)
答案 1 :(得分:0)
使用shell的parameter expansion alternate value语法,echo -e
和一些退格符号进行攻击:
test=$(echo hello | grep 'helo'); echo -e not${test:+\\b\\b\\bis} set
根据is set
找到的内容输出not set
或grep
。