Bash脚本中行数与整数比较异常问题排查
Bash脚本行数比较异常的问题解决
核心问题是你错误地给行数变量赋值,导致lines实际是空值,进而让1 -lt ${lines}的比较结果不符合预期。
错误原因
你的代码里:
lines= wc -l < $input
这种写法是把lines=作为临时环境变量传给wc命令,并没有将wc -l的输出赋值给当前shell的lines变量。所以${lines}实际是空字符串,[[ 1 -lt "" ]]的比较不成立,自然返回false。
修正方法
用命令替换$(...)捕获wc -l的输出,正确赋值给lines:
input="sample.txt" lines=$(wc -l < "$input") # 用$(...)包裹命令,获取输出赋值给变量 x=1 [[ ${x} -lt ${lines} ]] && echo "true" || echo "false"
修正后,lines会被正确赋值为文件的总行数(比如14),此时1 -lt 14的比较会返回true,后续的while循环也能正常执行。
额外建议
- 引用文件名时加上双引号
"$input",避免文件名包含空格或特殊字符时出现错误。 - 如果担心
wc -l输出有多余空格,可以用lines=$(wc -l < "$input" | xargs)来确保变量是纯数字。
内容的提问来源于stack exchange,提问作者Joshua Wilkinson
相关产品推荐
相关产品推荐

