这是我简单的shell脚本
root@Ubuntu:/tmp# cat -n script.sh
1 echo
2 while x= read -n 1 char
3 do
4 echo -e "Original value = $char"
5 echo -e "Plus one = `expr $char + 1`\n"
6 done < number.txt
7 echo
root@Ubuntu:/tmp#
这是number.txt
root@Ubuntu:/tmp# cat number.txt
12345
root@Ubuntu:/tmp#
正如您在代码中看到的那样,我正在尝试读取每个数字并单独处理它。在这种情况下,我想为每个添加一个并在新行上打印。
root@Ubuntu:/tmp# ./script.sh
Original value = 1
Plus one = 2
Original value = 2
Plus one = 3
Original value = 3
Plus one = 4
Original value = 4
Plus one = 5
Original value = 5
Plus one = 6
Original value =
Plus one = 1
root@Ubuntu:/tmp#
除最后一行外,一切看起来都很好。我只有5个数字,但似乎代码正在处理额外的数字。
Original value =
Plus one = 1
问题是这是如何发生以及如何解决的?
答案 0 :(得分:1)
输入文件number.txt
似乎包含一个完整的行,它由换行符(LF)终止。 (您可以使用ls -l
验证输入文件是否超过5。)read
最终遇到LF并为您提供一个空char
(从输入中剥离终止LF,如果没有-n
选项)。这将为您expr + 1
提供1
。您可以明确地测试空char
并使用测试-n
终止while循环以获取非零长度字符串:
echo "12345" | while read -n 1 char && [ -n "$char" ]; do echo "$char" ; done