在条件中设置变量

时间:2018-02-22 20:16:08

标签: bash shell

是否可以在条件为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

输出:"设置" (预计未设定)

2 个答案:

答案 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 setgrep