Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用bash,如何使用echo将整数分配给变量_Bash_Variable Assignment - Fatal编程技术网

使用bash,如何使用echo将整数分配给变量

使用bash,如何使用echo将整数分配给变量,bash,variable-assignment,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}

我想更好地理解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=$…',我会得到一个错误'command not found'。我不明白,有人能解释一下吗


另外,如果我有大量的异常,我是否可以对这个脚本进行改进,以避免长时间的if列表;那么如果…?

问题出现在=和$之间的空格中:

你应该不带空格地写:

decval=$(...
因为,如果您写入空格,shell会将decval=读取为declval=并将$echo的结果处理。。。作为要执行的命令的名称,显然它找不到该命令

也只是一个小优化,您可以编写:

sed 's/^0\+//'
而不是

sed 's/^0//g' | sed 's/^0//g'
在这里:

0\+表示0一次或多次; g被删除,因为g表示替换字符串中的所有事件,并且您只有一个事件^。 此外,即使使用前导零也可以检查变量,无需sed:


问题在=和$之间的空格中:

你应该不带空格地写:

decval=$(...
因为,如果您写入空格,shell会将decval=读取为declval=并将$echo的结果处理。。。作为要执行的命令的名称,显然它找不到该命令

也只是一个小优化,您可以编写:

sed 's/^0\+//'
而不是

sed 's/^0//g' | sed 's/^0//g'
在这里:

0\+表示0一次或多次; g被删除,因为g表示替换字符串中的所有事件,并且您只有一个事件^。 此外,即使使用前导零也可以检查变量,无需sed:


甚至sed的/^0*/'应该可以移植到几乎任何平台。我可以发誓我已经尝试过了……所以我当然不会“再”尝试了。哦!甚至sed的/^0*/'应该可以移植到几乎任何平台。我可以发誓我已经尝试过了……所以我当然不会“再”尝试了。哦!生成可变宽度,然后使用简单的printf转换为固定宽度可能更容易。要获得更多的改进,请查看shell的case语句。生成可变宽度,然后使用简单的printf转换为固定宽度可能更容易。要获得更多的改进,请查看shell的case语句。