#!/bin/bash
if [ $# = 3 ]
then
echo "input num=3"
op=$2
op_a=$1
op_b=$3
if [ $op = "add" ]
then
c= expr $op_a + $op_b
echo "$op_a + $op_b = $c"
elif [ $op = "sub" ]
then
c= expr $op_a - $op_b
echo "$op_a - $op_b = $c"
elif [ $op = "mul" ]
then
c= expr $op_a \* $op_b
echo "$op_a * $op_b = $c"
elif [ $op = "div" ]
then
c= expr $op_a / $op_b
echo "$op_a / $op_b = $c"
else
echo "Unknow op"
fi
else
echo "input num error"
fi
运行此shell后,$c
(变量)不会显示在Bash的enco中。
有人可以告诉我原因吗? expr可能与echo有冲突,或者我的配置有问题吗?
非常感谢 P.S Linux版本是Ubuntu 16.04,bash版本是4.3.42。
答案 0 :(得分:1)
这基本上是一个范围问题。你的脚本启动它自己的bash shell实例,$ c在那里有值。当脚本完成时,其操作环境/执行上下文//无论结束还是完成,所以你的$ c变量不再存在。
但是,如果您使用source加载脚本,它将作为当前shell的一部分运行,因此$ c仍然具有值。
#!/bin/bash
c="Hello World"
echo $c
echo $ c给出null。
user@host:~ $ ./demo.sh
Hello World
user@host:~ $ echo $c
user@host:~ $ source demo.sh
Hello World
user@host:~ $ echo $c
Hello World
答案 1 :(得分:1)
这些
c= expr $op_a - $op_b
不要做你想做的事。 (这会将空值分配给c
,然后运行expr
忽略结果。)您需要命令替换:
c=$(expr $op_a - $op_b)