Bash 脚本打印表达式而不是结果

Bash 脚本打印表达式而不是结果

我正在尝试计算参数数量与客户提供的第一个参数的乘积。这里参数是 10、15,所以参数总数是 2。现在我希望 shell 执行 2*10(因为 10 是第一个参数)。我得到的不是答案,而是代码。

我写的程序:

r=$(echo "$1 \* $#")
echo "Following are the numbers you entered $@ "
echo "first number : $1. and second number: $2."
echo "total number of entered numbers: $#"
echo "expected result: $r"

结果:

root@LAPTOP-J:~# bash test.sh 10 15
Following are the numbers you entered 10 15
first number : 10. and second number: 15.
total number of entered numbers: 2
expected result: 10 \* 2
root@LAPTOP-J5JNFL7K:~#

答案1

那么,echo所做的就是打印作为参数给出的字符串。就像回声一样,原来的声音又回来了。

echo foo bar印刷foo bar; echo "$var"打印内容$var(在 shell 扩展值之后);如果这些是和的值,echo "$1 \* $#"则打印。 (星号在双引号内并不特殊,因此不会删除反斜杠。)10 \* 2$1$#

expr您可能会将其与可以进行算术运算的混淆。

但是在 shell 中不需要外部命令进行算术运算,只需使用算术扩展即可$(( .. )),例如:

r=$(( $1 * $# ))

但请注意,如果$1包含数字以外的其他内容,结果可能是奇数(甚至运行嵌入在 中的任意命令$1,至少在 Bash 中)。对于严肃的工作,您可能需要首先对那里的值进行健全性检查。

相关内容