Оператор Bash == в [[]] слишком умный! - PullRequest
3 голосов
/ 07 августа 2009

Показательный пример. Я хочу знать, имеет ли какой-либо набор файлов в качестве первой строки '------'.

Итак,

for file in *.txt
do
    if [[ `head -1 "$file"` == "------" ]]
    then
        echo "$file starts with dashes"
    fi
done

Дело в том, что head возвращает содержимое с новой строкой, но "------" не имеет новой строки.

Почему это работает?

Ответы [ 2 ]

6 голосов
/ 07 августа 2009

Обратные черты лишают завершающий символ новой строки. Например:

foo=`echo bar`
echo "<$foo>"

печать

<bar>

несмотря на то, что это первое эхо-сообщение выводило «полоску», за которой следовал символ новой строки.

0 голосов
/ 07 августа 2009

Bash выполняет разбиение слов по результату подстановки команд, т.е. head -1 "$file"

Разделение слов удалит новые строки среди прочего.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...