Ви повинні використовувати будь-коли #! /bin/sh
.
Ви не повинні використовувати розширення bash (або zsh, або fish, або ...) у сценарії оболонки ніколи.
Вам слід коли-небудь писати сценарії оболонки, які працюють з будь-якою реалізацією мови оболонки (включаючи всі програми "утиліти", які йдуть разом із самою оболонкою). Сьогодні ви, ймовірно, можете вважати POSIX.1-2001 ( не -2008) авторитетним для того, на що здатні оболонки та утиліти, але майте на увазі, що одного дня вас можуть попросити перенести свій скрипт у спадщину (наприклад, Solaris або AIX), чиї оболонки та комунальні послуги були заморожені приблизно в 1992 році.
Що, серйозно ?!
Так, серйозно.
Ось що: Shell - жахлива мова програмування. Єдине, що це стосується, це те, що /bin/sh
це єдиний інтерпретатор скриптів, який гарантовано мати кожна установка Unix.
Ось інша річ: деякі ітерації ядра Perl 5 інтерпретатора ( /usr/bin/perl
) є більш ймовірно, будуть доступні на випадково обраної установки Unix , ніж (/(usr|opt)(/(local|sfw|pkg)?)?/bin/bash
це. Інші хороші мови сценаріїв (Python, Ruby, node.js тощо) - я навіть включаю PHP і Tcl до цієї категорії, якщо порівнювати з оболонкою) також приблизно доступні як bash та інші розширені оболонки.
Тому, якщо у вас є можливість написання bash-скрипту, ви можете використовувати мову програмування, яка не є страшною.
Тепер, прості скрипти оболонки, такі, що просто запускають кілька програм в послідовності з завдання Cron або щось подібне, немає нічого поганого в тому, щоб залишити їх як скрипти оболонки. Але прості сценарії оболонки не потребують масивів чи функцій чи [[
навіть. І ви повинні писати складні сценарії оболонки лише тоді, коли у вас немає іншого вибору. Наприклад, сценарії автозапуску, як правило, все ще є сценаріями оболонки. Але ці сценарії повинні працювати на кожному втіленні, /bin/sh
що стосується програми, яка налаштована. а це означає, що вони не можуть використовувати будь-які розширення. Напевно, вам не доведеться піклуватися про старі власні Unixes в наші дні, але вам, мабуть, слід подбати про поточні BSD з відкритим кодом, деякі з яких не встановлюютьсяbash
за замовчуванням та вбудовані середовища, які дають лише мінімальний оболонку та busybox
.
На закінчення відзначимо , що момент , коли ви опиняєтеся бажаючи особливість , яка недоступна в портативному мовою оболонки, що є ознакою того, що сценарій став занадто складним , щоб залишитися скрипт. Перепишіть її замість кращої мови.
bash
функції та синтаксис, а неsh
функції та синтаксис.