如何根据环境变量将变量值设置为某些值。
例如,我希望它成为
var1 = var2 if ENV_VARIABLE==true else var3
(为简单起见,使用python语法)
我希望这也可以单行发生。在这种情况下,bash中的正确语法是什么? https://unix.stackexchange.com/questions/122845/using-a-b-for-variable-assignment-in-scripts的指南很好,但没有涵盖这种情况。
答案 0 :(得分:3)
尝试一下:
[[ "$ENV_VARIABLE" == "true" ]] && var1="$var2" || var1="$var3"
答案 1 :(得分:3)
这是可移植到ur-sh
上的,并且从技术上讲可以放在一行上。
case $ENV_VARIABLE in true) var1=var2;; *) var1=var3;; esac
答案 2 :(得分:3)
var1 = var2 if ENV_VARIABLE==true else var3
所以:
var2=smth
var3="other smth"
ENV_VARIABLE=true
我们可以(最好不要删除结尾的换行符):
if [ "$ENV_VARIABLE" = true ]; then var1=$var2; else var1=$var3; fi
或(假设ENV_VARIABLE
仅是字符串“ true”或字符串“ false”):
if "$ENV_VARIABLE"; then var1=$var2; else var1=$var3; fi
或(删除尾随的换行符)
var1=$(if "$ENV_VARIABLE"; then echo "$var2"; else echo "$var3"; fi)
或(删除尾随的换行符)
var1=$("$ENV_VARIABLE" && echo "$var2" || echo "$var3")
或(删除结尾的换行符,而eval是邪恶的)
var1=$(eval echo "\$$("$ENV_VARIABLE" && echo var2 || echo var3)")
或(评估是邪恶的)
eval var1=\$$(arr[0]=var2; arr[1]=var3; [ "$ENV_VARIABLE" = true ]; echo "${arr[$?]}")
或(评估是邪恶的)
eval var1=\$$("$ENV_VARIABLE" && echo var2 || echo var3)
或(删除尾随的换行符)
printf -v var1 "%s" "$("$ENV_VARIABLE" && echo "$var2" || echo "$var3")"
或(疯狂)
var1=$("$ENV_VARIABLE"; printf "%s\x00" "$var2" "$var3" | head -z -n$(($?+1)) | tail -z -n1 | tr -d '\000')
或(命名参考变量,因此不是真正的赋值,而是一个指针)
declare -n var1=$("$ENV_VARIABLE" && echo "var2" || echo "var3")
喘不过气来。老实说,只有第一个才是正确的。有时我在脚本中使用布尔变量作为true
和false
字符串,这仅允许删除[ ... = true ]
部分。
答案 3 :(得分:3)
if
语句可以写在一行上。
-z
可用于测试变量是否已定义并具有值。
{-a
”在测试中代表AND
==编辑==
(请参阅@tripleee的评论:第一个版本包含一个-a
,这是不可靠的。我没有发现所建议的第一个版本有问题,但是避免使用{ {1}}和-a
)
尝试一下:
-o
。
。
==第一个版本==
if [[ ! -z "${ENV_VARIABLE}" && "${ENV_VARIABLE}" = true ]] ; then var1="${var2}"; else var1="${var3}"; fi
答案 4 :(得分:2)
同时使用默认值和备用值。
var1=${ENV_VARIABLE:+$var2} var1=${var1:-$var3}
$ var2=foo
$ var3=bar
$ var1=${ENV_VARIABLE:+$var2} var1=${var1:-$var3}
$ echo $var1
bar
$
$ var1=${HOME:+$var2} var1=${var1:-$var3}
$ echo $var1
foo