В bash я хочу сказать «если файл не содержит XYZ, а затем« сделайте кучу вещей ». Самый естественный способ перенести это в код что-то вроде:Bash условно на код выхода команды
if [ ! grep --quiet XYZ "$MyFile" ] ; then
... do things ...
fi
Но, конечно, это не действительный синтаксис Bash. Я мог бы использовать backticks, но тогда я буду тестировать вывод файла. Две альтернативы, я могу думать о том, являются:
grep --quiet XYZ "$MyFile"
if [ $? -ne 0 ]; then
... do things ...
fi
И
grep --quiet XYZ "$MyFile" ||
( ... do things ...
)
I рода предпочитают второй один, это более Lispy и || для потока управления не так уж и необычен в языках сценариев. Я тоже вижу аргументы для первого, хотя, когда человек читает первую строчку, они не знают , почему вы выполняете grep, похоже, что вы выполняете его для основного эффекта, а не только для управлять ветвью в скрипте.
Есть ли третий, более прямой способ, который использует оператор if
и имеет grep
в состоянии?
возможно дубликат [встреча «ожидается унарный оператор» в Баш скрипт] (http://stackoverflow.com/questions/10586213/encounter-unary-operator-expected-in-bash-script) – tripleee