Для начала, если вы можете сделать предположение, что Bash предустановлен (что, насколько мне известно, имеет место во всех перечисленных вами системах), используйте следующий hashbang для совместимости:
#!/usr/bin/env bash
это вызывает все, что bash
происходит, независимо от того, находится он в /bin
или /usr/local/bin
.
Хотя на большинстве систем в широком диапазоне (включая AIX, Solaris, несколько разновидностей BSD) bash
, env
оказывались в разных местах, всегда оказывались /usr/bin/env
. Уловка, однако, не моя, но от автора Поваренной книги Bash.
В любом случае, да, Bash позволит вам использовать некоторые «современные» функции, которые сделают вашу жизнь проще.
Например двойные скобки:
[[ -f "/etc/debian_version" ]] && echo "This is a Debian flavor"
в то время как в традиционных диалектах оболочки вам придется прибегнуть к:
test -f "/etc/debian_version" && echo "This is a Debian flavor"
но лучшее в двойных скобках то, что они позволяют регулярные выражения для сопоставления. Bash Hackers Wiki даст вам много трюков в этом направлении.
Вы также можете использовать довольно удобные выражения, такие как $((2**10))
или другие арифметические выражения, встроенные в $((expression))
синтаксис.
Использование backticks для подоболочек хорошо, хотя и немного устарело. Но вложенные возможности $(command ...)
вызовов гораздо удобнее, так как вам не придется избегать многих вещей на разных уровнях подоболочек.
Это всего лишь несколько вещей, которые Bash дает вам по сравнению с традиционным sh
синтаксисом POSIX .
Но если вы хотите больше возможностей для оболочки (не только в сценариях), также посмотрите zsh
.
/bin
и/usr/bin
. В результате, в#!/usr/bin/env <shname>
наши дни , вероятно, лучше использовать для мобильности.