如果不满足条件,则取消设置变量并移至下一行
Unset variables and move on to the next line if condition not met
我需要有人帮助我满足以下要求。
我有 4 个从 while 语句派生的变量(var1、var2、var3、var4)。
在这个 while 循环下,我有一个 if 循环来根据条件检查 (var4) 并写入输出文件。
我的要求是,如果 var4 不满足 if 条件,则输出文件中不应包含变量(var1、var2、var3,包括 var4)。
我尝试使用 unset ($var1, $var2, $var3, $var4)
,但它不起作用。
我的 if 循环:
if [! -z "var4"]
then
mynew=`echo "var4"`
else
unset ($var1,$var2,$var3,$var4)
fi
您可以在一行中执行此操作,如
[ ! -z "$var4" ] && read mynew <<<"${var4}" || unset var1 var2 var3 var4
# Checking if '$var4' is not empty
# Storing var4 variable value in 'mynew'
# If empty un-setting all the variables in one shot
(或)下面的应该没问题
[ ! -z "$var4" ] && mynew="${var4}" || unset var1 var2 var3 var4
你的代码有问题
一、作业
mynew=`echo "var4"`
是一种昂贵的(因为它涉及一个子shell)和间接的说法
mynew="$var4"
非常简单明了。
其次,我们需要将变量名传递给 unset
,而不是值。因此:
unset $var1 $var2 $var3 $var4
是错误的,除非您想取消设置名称包含在 var1
到 var4
中的变量。对于 unset $var1
,shell 会将 var1
中包含的值解释为要取消设置的变量的名称。如果值为空,unset不做任何动作,视为正常。
解决方案
通过上述更正,您可以像这样重写 if
块:
if [[ "$var4" ]]; then
# var4 is set
mynew="$var4"
else
unset var1 var2 var3 var4
fi
如果 if
和 else
中的操作是单个语句,如您的示例所示,您可以使用 &&
和||
如@Inian 的回答所示构造。
更多信息
[[ "$var4" ]]
也可以写成:
[[ ! -z "$var4" ]] # $var4 is not of zero length
或
[[ -n "$var4" ]] # $var4 is not empty
我需要有人帮助我满足以下要求。
我有 4 个从 while 语句派生的变量(var1、var2、var3、var4)。
在这个 while 循环下,我有一个 if 循环来根据条件检查 (var4) 并写入输出文件。
我的要求是,如果 var4 不满足 if 条件,则输出文件中不应包含变量(var1、var2、var3,包括 var4)。
我尝试使用 unset ($var1, $var2, $var3, $var4)
,但它不起作用。
我的 if 循环:
if [! -z "var4"]
then
mynew=`echo "var4"`
else
unset ($var1,$var2,$var3,$var4)
fi
您可以在一行中执行此操作,如
[ ! -z "$var4" ] && read mynew <<<"${var4}" || unset var1 var2 var3 var4
# Checking if '$var4' is not empty
# Storing var4 variable value in 'mynew'
# If empty un-setting all the variables in one shot
(或)下面的应该没问题
[ ! -z "$var4" ] && mynew="${var4}" || unset var1 var2 var3 var4
你的代码有问题
一、作业
mynew=`echo "var4"`
是一种昂贵的(因为它涉及一个子shell)和间接的说法
mynew="$var4"
非常简单明了。
其次,我们需要将变量名传递给 unset
,而不是值。因此:
unset $var1 $var2 $var3 $var4
是错误的,除非您想取消设置名称包含在 var1
到 var4
中的变量。对于 unset $var1
,shell 会将 var1
中包含的值解释为要取消设置的变量的名称。如果值为空,unset不做任何动作,视为正常。
解决方案
通过上述更正,您可以像这样重写 if
块:
if [[ "$var4" ]]; then
# var4 is set
mynew="$var4"
else
unset var1 var2 var3 var4
fi
如果 if
和 else
中的操作是单个语句,如您的示例所示,您可以使用 &&
和||
如@Inian 的回答所示构造。
更多信息
[[ "$var4" ]]
也可以写成:
[[ ! -z "$var4" ]] # $var4 is not of zero length
或
[[ -n "$var4" ]] # $var4 is not empty