使用bash,如何使用echo将整数分配给变量
我想更好地理解bash,因为我显然很讨厌它 我试图生成一个等宽整数序列,然后对它们进行测试,以对特定值执行一些特殊操作。像这样:使用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}
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语句。