在 bash 脚本中,我偶然发现了一个看似简单的问题,即从以数字形式给出的参数创建表达式并+
在其前面添加加号:
YEA= expr $2 \* 365
echo ${YEA}
pl="+"
echo "${pl}${YEA}"
我希望将其连接到一个字符串,因此例如$2=10
应该输出:
3650
+3650
虽然它在命令行上工作得很好,但在脚本中它只输出
3650
+
我也尝试使用printf
和awk
,它们的作用类似。所以我认为我的问题出在 bash 上。
有人可以解释为什么会发生这种情况吗?
答案1
赋值运算符后面不应该有空格。
YEA= expr $2 \* 365
# ~
使用空格,它会运行环境expr
变量$YEA
显式设置为空字符串的情况。expr
不关心环境变量,只关心计算并输出结果。 shell 上下文中的变量不会改变。
要将命令的输出分配给变量,请使用命令替换:
YEA=$(expr $2 \* 365)
或使用算术评估而不expr
:
(( YEA = $2 * 365 ))