让命令不在echo中工作

时间:2017-09-03 14:30:53

标签: linux shell

我正在学习shell编程。我检查了let命令。我试图在回声中使用它,就像我们使用expr一样,但我不明白我怎么可能这样做

num1=30
num2=20
echo "Sum is `let $num1 + $num2` "

3 个答案:

答案 0 :(得分:0)

是的,它不适用于echo,只适用于作业:

let a=1+2
echo $a
3

尝试:

let a=$num1+$num2 && echo "Sum is $a"

或更容易:

echo "Sum is $((num1+num2))"

echo "Sum is $(($num1+$num2))"

答案 1 :(得分:0)

在过去二十年的shell编程过程中,

letexpr和反引号已逐步停止使用。他们仍然在那里你可以使用它们,但现在有更容易,更方便和更安全的结构使用:

  • let可能会被(( ... ))
  • 取代
  • expr可能会被$(( ... ))

  • 取代
  • 反引号可以由$( ... )替换。这些更好地嵌套,引用工作直观。

因此,考虑到这一点,您的脚本可能会被重写

#!/bin/sh

num1=30
num2=20

printf 'Sum is %d\n' "$(( num1 + num2 ))"

或者,如果您乐意使用echo输出变量字符串:

echo "Sum is $(( num1 + num2 ))"

而不是printf的最后一行。

答案 2 :(得分:0)

首先:我们在谈论哪个shell?您的问题标记为 shell ,它通常引用Posix shell,并且没有let

其次,bash和Zsh确实有,但是(正如你可以通过尝试一样轻松看到),该命令不会在标准输出上打印任何内容,因此let 4711将始终被空字符串替换