В процессе написания сценария оболочки я столкнулся с проблемой следующего оператора if / else, который находится где-то посередине сценария:
if [ $act -eq "add" ]
then
read - "add or update: " $comm
git commit -m "$comm $file"
else
git commit -m "$act $file"
fi
Возвращаемая ошибка:
./gitup: line 13: [: add: integer expression expected
а затем приступает к остальной части сценария. Как можно, если сегмент if оценивает / сравнивает переменную со строковым вводом, а не с целым числом; при использовании «! =» потребовалась другая ошибка среди нескольких других, которые я пробовал.
bash
shell-script
bash-scripting
tony_perkis666
источник
источник
[[]]
тест является специфической для Bash конструкцией, и этот пример работает с POSIX так же,[]
как и в вопросе. Если интерпретатор явно указан как#!/bin/bash
или похожий, его[[]]
можно использовать без проблем (и я полагаю, что он работает немного быстрее, чем альтернатива в Bash - не то, что это все равно должна быть горлышко бутылки), в противном случае следует придерживаться[]
. Если специфика Bash вообще не нужна, скрипт будет работать немного быстрее, например, в Dash. И POSIX обеспечивает присущую мобильность.Этот метод также будет работать. Очень похоже на ответ @ Guru, но устраняет необходимость в двойных квадратных скобках.
источник