使用bash,如何使用echo将整数赋值给变量

时间:2014-01-18 10:14:13

标签: bash variable-assignment

我想了解bash好一点,因为我显然很可怕......

我正在尝试生成一系列恒定宽度的整数,但是然后测试它们以针对特定值执行特殊操作。像这样:

  for n in $(seq -w 1 150)
  do
    # The next line does not work: doit.sh: line 9: XX: command not found
    #decval= $( echo ${n} | sed 's/^0//g' | sed 's/^0//g' )
    #if [[ ${decal} -eq 98 ]] ; then
    if [[ $( echo ${n} | sed 's/^0//g' | sed 's/^0//g' ) -eq 98 ]] ; then
      echo "Do something different for 98"
    elif [[ $( echo ${n} | sed 's/^0//g' | sed 's/^0//g' ) -eq 105 ]] ; then
      echo "Do something different for 98"
    fi
  done

这个脚本适用于我的目的,但是如果我尝试进行赋值'decval = $(......'我得到错误'命令未找到'。我不明白这个,有人可以解释一下吗?

此外,如果我有大量例外以防止长列表if,我可以对此脚本进行改进吗?那么elif ......?

1 个答案:

答案 0 :(得分:6)

问题出在=$

之间
decval= $(…

你应该写不带空格:

decval=$(...

因为,如果你编写空格,你的shell会将decval=读作declval=""并将$(echo...)的结果视为要执行的命令的名称,显然它不会找到命令。

另外(只是一个小优化),你可以写:

sed 's/^0\+//'

而不是

sed 's/^0//g' | sed 's/^0//g'

下面:

  • 0\+表示0一次或多次;
  • g已删除,因为g表示替换字符串中的所有出现,并且您只有一次出现(^只能在字符串中出现一次)。

此外,您可以使用前导零检查变量,而不使用sed

[[ "$n" =~  "0*98" ]]