使用bash的$(())运算符进行算术运算时出现意外的变量更新

phi*_*ilo 1 bash shell environment-variables

我正在尝试从文件中修剪几行.我确切地知道要移除多少行(比如从顶部开始的2行),但不知道文件中有多少行.所以我尝试了这个直截了当的解决方案:

$ wc -l $FILENAME
119559 my_filename.txt
$ LINES=$(wc -l $FILENAME | awk '{print $1}')
$ tail -n $(($LINES - 2)) $FILENAME > $OUTPUT_FILE
Run Code Online (Sandbox Code Playgroud)

输出很好,但LINES发生了什么?

$ wc -l $OUTPUT_FILE
119557 my_output_file.txt
$ echo $LINES
107
Run Code Online (Sandbox Code Playgroud)

希望有人能帮我理解发生了什么.

Mic*_*man 5

$LINES有特殊意义.它是终端具有的行数,如果您调整终端窗口的大小,它将被重置.见info "(bash)Bash Variables".