Если вы хотите проверить это аргумент функции эквивалентен некоторой строке, вы должны использовать конструкцию if ["$ x" == "строка"]
, тогда ваш код будет выглядеть так:
test () {
if [ "$1" == "toto" ] then
return 1
elif [ "$1" == "tata" ] then
return 4
fi
}
main () {
test "tata"
if [ $? -ne 1 ] then
echo "somecode"
fi
}
main "$@"
И вы можете использовать test
] имя функции. Если вы хотите вызвать встроенный тест
, используйте конструкцию встроенного теста
.
И позаботьтесь о =
(назначение) и ==
(сравнение). Внутри теста [
и ]
оператор =
работает как ==
и проверяет равенство строк (не чисел).
set -o errexit
завершает работу сразу после того, как команда вернет ненулевое значение (неудачно). Ваш ниндзя
возвращает 1
(который не равен нулю) и завершает работу.
Ваш код без тестов не работает причина if
оператор пытается выполнить инструкции в нем и определить состояние выхода команды: если состояние выхода равно нулю (успех), затем выполнить инструкции после , затем с
до elif
из fi
.
- exclude-dir
не понимает |
.
Вы можете, однако, получить тот же эффект, указав - exclude-dir
несколько раз, по одному для каждого каталога, который вы хотите исключить:
grep -inRw -E --exclude-dir 'asset' --exclude-dir 'git' --exclude-dir 'log' 'direct'
Описание этой опции на странице руководства вводит в заблуждение ... Это шаблон, как в globs , а не шаблон, как в regex . Согласно info
странице :
- exclude-dir = GLOB
Пропускать любой каталог командной строки с суффиксом имени, который соответствует шаблону GLOB . При рекурсивном поиске пропустите все подкаталоги, чье базовое имя соответствует GLOB. Игнорируйте любые повторяющиеся косые черты в конце в GLOB.
Итак, в вашем случае вы можете запустить:
grep -inRw -E 'direct' . --exclude-dir={git,log,assets}
, чтобы исключить каталоги с именами git
, log
и assets
или, например,
grep -inRw -E 'direct' . --exclude-dir={\*git,asset\*}
, чтобы исключить имена каталогов, заканчивающиеся на git
или начинающиеся на asset
.
Вот что я делал не так :вводом в --exclude-dir
является каталог -имя (с ), а не имя пути (с ). имена каталогов не могут содержать /
.
Следующие работы:
grep -r --exclude-dir={cache,lib} pattern /home/ /var/
Следование не работает:
grep -r --exclude-dir={/var/cache,/var/lib} pattern /home/ /var/
Пожалуйста, используйте это:
grep -inRw -E 'direct' folder/ --exclude-dir={\*git\*,\*log\*,\*assets\*}
или текущая папка
grep -inRw -E 'direct'. --exclude-dir -E 'git|log|asset'