我想从字符串中提取一个数字,并将该数字用于将来的计算
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小时,但可以找到为什么会发生这种情况。有人告诉我为什么
答案 0 :(得分: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
的最终字符。建议修复文件,而不是围绕它编码。
答案 1 :(得分:0)
你可以替换:
let size=$size+1
到
let size=$[$size+1]
或
let size=$[size+1]
或
let size++
或
let size=`expr $size + 1`
所有示例在ubuntu 13.04上运行正常,你也是例子。