我正在尝试删除bash中变量前面的所有零。但是我无法将其保存在变量中。一些帮助
问题出在这里:if (( $line > $lastMin )) ; then
运行Bash错误,因为该值对于基数太大(错误元素为“ 0455233”)
这就是为什么我试图通过删除在我面前发现的所有零来保存该值的原因
请问有什么解决方法吗?
lastMin=0455233
zeroMin=$(( $lastMin | sed 's/^0*//' ))
答案 0 :(得分:5)
lastMin='0455233'
zeroMin=$((10#$lastMin))
答案 1 :(得分:3)
删除所有前导0
;
lastMin='0000455233'
zeroMin=$(echo "$lastMin" | sed 's/^0*//')
echo "$zeroMin" # output : 455233
您的问题是由使用$((
而不是$(
引起的,而不是echo
是旧变量。
答案 2 :(得分:2)
算术扩展$(( ... ))
用于算术。 |
是$(( ... ))
内部的“二进制或”运算。
您只想将变量值通过管道传递到另一个命令的标准输出,例如。 sed
。
在posix兼容的shell上,您可以使用带有流程替换|
的简单管道$()
:
zeroMin=$(printf "%s\n" "$lastMin" | sed 's/^0*//')
# or a little tiny bit less portable version with echo
zeroMin=$(echo "$lastMin" | sed 's/^0*//')
在bash上,您可以在此处使用<<<
字符串:
zeroMin=$(<<<$lastMin sed 's/^0*//')
答案 3 :(得分:1)
您不需要为此生成单独的过程,只需使用parameter expansions:
$ a=01234
$ b=00001234
$ c=1234
$
$ echo "${a#${a%%[1-9]*}}"
1234
$ echo "${b#${b%%[1-9]*}}"
1234
$ echo "${c#${c%%[1-9]*}}"
1234
${var%%[1-9]*}
将删除var
中以1到9之间的数字开头的最长后缀;因此它将留下前导零,现在您有了前导零,您可以使用var
将其从${var#${var%%[1-9]*}}
中删除。