如果我的条件在我的 Ubuntu 系统上成立,我想设置一个变量。
这证明我的 if 语句是正确的:
$ (if [ 1 == 1 ]; then echo "hi there"; fi);
hi there
这证明我可以设置变量:
$ a=1
$ echo $a
1
这表明在 if 语句中设置变量不起作用:
$ (if [ 1 == 1 ]; then a=2; fi);
$ echo $a
1
有什么想法吗?我所有的谷歌研究表明它应该像这样工作......
答案1
(...)
你的命令部分是你的问题。括号创建一个单独的子 shell。子 shell 将从其父 shell 继承环境,但一旦子 shell 退出,其中设置的变量将不会保留其新值。这也适用于任何其他更改子 shell 内的环境,包括更改目录、设置 shell 选项等。
因此,删除子外壳:
if [ 1 = 1 ]; then a=2; fi
echo "$a"
答案2
这证明在子shell中设置变量没有持久效果
(if [ 1 == 1 ]; then a=2; fi);
echo $a
产生
1
与...一样
(a=2)
echo $a
产生
1
解决方案去掉括号。
if [ 1 == 1 ]; then a=2; fi;
echo $a
产生
2
或者如果您需要子外壳
(
if [ 1 == 1 ]; then a=2; fi;
echo $a
)
产生
2
答案3
通过下面的方法完成并且效果很好
_example ~]# if [[ 1 == 1 ]]; then echo "praveen"; a=2; echo $a; fi| sed '1i================================\n output'
================================
output
praveen
2