Na początek, jeśli możesz założyć, że Bash jest wstępnie zainstalowany (co, zgodnie z moją wiedzą, dotyczy wszystkich wymienionych systemów), użyj następującego hashbangu, aby być kompatybilnym:
#!/usr/bin/env bash
wywołuje to wszystko bash, co dzieje się w konfiguracji, bez względu na to, czy jest w, /binczy w /usr/local/bin.
Podczas gdy na większości systemów w szerokim zakresie (w tym AIX, Solaris, kilka odmian BSD), bashtrafiał do różnych lokalizacji, envzawsze trafiał do /usr/bin/env. Sztuczka nie jest jednak moja, ale autorstwa autora książki kucharskiej Bash.
W każdym razie, tak, Bash pozwoliłby ci użyć niektórych „nowoczesnych” funkcji, które ułatwią ci życie.
Na przykład podwójne nawiasy kwadratowe:
[[ -f "/etc/debian_version" ]] && echo "This is a Debian flavor"
mając na uwadze, że w tradycyjnych dialektach skorupowych trzeba by uciekać się do:
test -f "/etc/debian_version" && echo "This is a Debian flavor"
ale najlepsze w podwójnych nawiasach jest to, że pozwalają na dopasowanie wyrażeń regularnych. Bash Hakerzy Wiki daje wiele sztuczek w tym kierunku.
Możesz także użyć całkiem wygodnych wyrażeń, takich jak $((2**10))lub inne wyrażenia arytmetyczne zgodne ze $((expression))składnią.
Używanie backsicków do podpowłok jest w porządku, choć nieco przestarzałe. Ale możliwości zagnieżdżania $(command ...)wywołań są znacznie wygodniejsze, ponieważ nie będziesz musiał uciekać przed wieloma rzeczami na różnych poziomach podpowłoki.
To tylko kilka rzeczy, które oferuje Bash w stosunku do tradycyjnej shskładni POSIX .
Ale jeśli chcesz więcej mocy na powłoce (nie tylko w skryptach), spójrz także zsh.
/bini/usr/bin. W związku z tym prawdopodobnie lepiej jest teraz używać#!/usr/bin/env <shname>do przenoszenia.