Чому "ніколи не використовуйте -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"))? Хіба нам це не потрібно((..))?