在bash脚本中将字符串转换为整数

Rob*_*Rey 34 bash

在一个文本文件test.txt中,我有下一个信息:

sl-gs5 desconnected Wed Oct 10 08:00:01 EDT 2012 1001
Run Code Online (Sandbox Code Playgroud)

我想通过下一个命令行提取事件的小时:

hour=$(grep -n sl-gs5 test.txt | tail -1 | cut -d' ' -f6 | awk -F ":" '{print $1}')
Run Code Online (Sandbox Code Playgroud)

我得到了"08".当我尝试添加1时,

 14 echo $((hour+1))
Run Code Online (Sandbox Code Playgroud)

我收到下一条错误消息:

./test2.sh: line 14: 08: value too great for base (error token is "08")
Run Code Online (Sandbox Code Playgroud)

如果Bash中的变量是无类型的,为什么?

cho*_*oba 85

参见算术求man bash:

前导0的常量被解释为八进制数.

您可以通过参数扩展删除前导零:

hour=${hour#0}
Run Code Online (Sandbox Code Playgroud)

或强制基础-10解释:

$((10#$hour + 1))
Run Code Online (Sandbox Code Playgroud)

  • 你也可以强制基础10解释:`$((10#$ hour + 1))`. (16认同)

she*_*ter 13

我称之为黑客,但鉴于你只处理小时值,你可以做到

 hour=08
 echo $(( ${hour#0} +1 ))
 9
 hour=10 
 echo $(( ${hour#0} +1))
 11
Run Code Online (Sandbox Code Playgroud)

风险很小.

IHTH.


mak*_*kim 8

你也可以用 bc

hour=8
result=$(echo "$hour + 1" | bc)
echo $result
9
Run Code Online (Sandbox Code Playgroud)