[[]]中的Bash ==运算符太聪明了!

Vin*_*vic 3 linux bash

一个很好的例子.我想知道一组文件是否作为第一行'------'.

所以,

for file in *.txt
do
    if [[ `head -1 "$file"` == "------" ]]
    then
        echo "$file starts with dashes"
    fi
done
Run Code Online (Sandbox Code Playgroud)

事情是,head使用换行符返回内容,但"------"没有换行符.

它为什么有效?

Lau*_*ves 6

反引号剥离了尾随换行符.例如:

foo=`echo bar`
echo "<$foo>"
Run Code Online (Sandbox Code Playgroud)

版画

<bar>
Run Code Online (Sandbox Code Playgroud)

即使第一个回声打印出"bar"后跟换行符.

  • 相关BASH手册引用:"Bash通过执行命令并用命令的标准输出替换命令替换来执行扩展,删除任何尾随换行符." (2认同)