我正在编写一个使用sh -c 'bash in here'
调用的复杂bash脚本。但是当我尝试设置一个变量时,我会得到非常明显的行为:
sh -c "SOMEVAR=$(expr 1 - 2) && echo $SOMEVAR"
输出1
时应为-1
!
据我了解,$(expr 1 - 2)
评估为-1
。所以基本上这个脚本SOMEVAR=-1 && echo SOMEVAR
返回1
。
我对Bash有什么不了解?我的剧本出了什么问题?
答案 0 :(得分:1)
我弄清楚Bash在做什么:因为我使用双引号("
),我的变量(SOMEVAR
)外部值(1
)是被插入实际运行代码的sh -c
内容:
sh -c "SOMEVAR=$(expr 1 - 2) && echo 1"
而不是:
sh -c "SOMEVAR=$(expr 1 - 2) && echo $SOMEVAR"
解决方案:使用单引号('
)
sh -c 'SOMEVAR=$(expr 1 - 2) && echo $SOMEVAR'