В bash я хочу сказать "если файл не содержит XYZ, а затем" сделайте кучу вещей ". Самый естественный способ транспонировать это в код - это что-то вроде:
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 ...
)
Я предпочитаю второй, он больше Lispy и || для потока управления не так уж и необычен в языках сценариев. Я также вижу аргументы для первого, хотя, когда человек читает первую строку, они не знают, почему вы выполняете grep, похоже, что вы выполняете его для основного эффекта, а не просто для управления ветвь в script.
Есть ли третий, более прямой способ, который использует оператор if
и имеет grep
в условии?