Почему "никогда не используйте оператор -a
или -o
"?
Потому что они могут быть двусмысленными и, следовательно, они не POSIX-совместимые :
Расширения XSI, определяющие двоичные основные цвета -a и -o и операторы '(' и ')', были помечены как устаревшие. (Многие выражения, использующие их, неоднозначно определяются грамматикой в зависимости от оцениваемых конкретных выражений.) Сценарии, использующие эти выражения, должны быть преобразованы в формы, приведенные ниже. Несмотря на то, что многие реализации будут продолжать поддерживать эти устаревшие формы, сценарии должны быть предельно осторожны при работе с вводимыми пользователем данными, которые можно спутать с этими и другими основными цветами и операторами. Если разработчик приложения не знает все случаи, которые производят ввод в сценарий, такие вызовы, как:
test "$1" -a "$2"
должно быть написано как:
test "$1" && test "$2"
Как я могу сделать "использовать несколько [
команд &&
и ||
операторы и операторы оболочки)"?
Выполняя несколько тестов и объединяя их в цепочку с помощью указанных операторов; например:
[ 0 -eq 0 -a \( 0 -eq 1 -o 1 -eq 1 \) ]
может быть переписан как эквивалент:
[ 0 -eq 0 ] && ([ 0 -eq 1 ] || [ 1 -eq 1 ])
или лучше:
[ 0 -eq 0 ] && { [ 0 -eq 1 ] || [ 1 -eq 1 ]; }
(
и)
операторы , что команды группы? Если они устарели, каковы их замены? (2) Долженtest "$1" -a "$2"
быть замененtest "$1" && test "$2"
или((test "$1" && test "$2"))
? Разве нам не нужно((..))
?