为什么变量不在Bash中显示?

时间:2016-12-10 15:10:57

标签: shell

#!/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。

2 个答案:

答案 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)