bash脚本从带加号的数字创建字符串

bash脚本从带加号的数字创建字符串

在 bash 脚本中,我偶然发现了一个看似简单的问题,即从以数字形式给出的参数创建表达式并+在其前面添加加号:

YEA= expr $2 \* 365
echo ${YEA}
pl="+"
echo "${pl}${YEA}"

我希望将其连接到一个字符串,因此例如$2=10应该输出:

3650
+3650

虽然它在命令行上工作得很好,但在脚本中它只输出

3650
+

我也尝试使用printfawk,它们的作用类似。所以我认为我的问题出在 bash 上。

有人可以解释为什么会发生这种情况吗?

答案1

赋值运算符后面不应该有空格。

YEA= expr $2 \* 365
#   ~

使用空格,它会运行环境expr变量$YEA显式设置为空字符串的情况。expr不关心环境变量,只关心计算并输出结果。 shell 上下文中的变量不会改变。

要将命令的输出分配给变量,请使用命令替换:

YEA=$(expr $2 \* 365)

或使用算术评估而不expr

(( YEA = $2 * 365 ))

相关内容