0

我想从字符串中提取一个数字并将该数字用于将来的计算

while IFS= read line ; do  

  if [[ "$line" == Content-Length* ]]
  then
  size=$(echo "$line" | awk '{print $2}')   
  echo "$size"
  let size=$size+1  
  echo "$size"
  break
  fi    
done <files

文件有行

Content-Length: 4806

但输出看起来像这样

4806
+1")syntax error: invalid arithmetic operator (error token is "
4806

我尝试了这个超过 5 小时,但可以找到为什么会这样。有人可以告诉我为什么

4

2 回答 2

2

您可以利用实际上Content-Length: 4806是一对以空格分隔的字符串这一事实。

while read -r field value; do
    if [ "$field" = "Content-Length" ]; then
        echo "$size"
        echo "$((size+1))"
    fi
done < files

要解决 DOS 行尾问题,请通过运行文件dos2unix或其他工具来修复行尾,或者使用修剪回车符

size=${size%.}

size这将从其值中删除最后一个字符。建议修复文件,而不是围绕它进行编码。

于 2013-10-18T21:08:56.180 回答
0

你可以替换:

let size=$size+1

let size=$[$size+1]

或者

let size=$[size+1]

或者

let size++

或者

let size=`expr $size + 1`

所有示例在 ubuntu 13.04 上运行良好,您也是示例。

于 2013-10-18T21:17:24.700 回答