Para empezar, si puede suponer que Bash está preinstalado (que, que yo sepa, es el caso en todos los sistemas que enumera), use el siguiente hashbang para ser compatible:
#!/usr/bin/env bash
Esto invoca cualquier cosa bash
que esté configurada, sin importar si está en /bin
o /usr/local/bin
.
Mientras que en la mayoría de los sistemas en una amplia gama (incluidos AIX, Solaris, varios sabores BSD), bash
terminaron en diferentes ubicaciones, env
siempre terminaron en /usr/bin/env
. Sin embargo, el truco no es mío, sino del autor del Bash Cookbook.
De todos modos, sí, Bash te permitiría usar algunas características "modernas" que te facilitarán la vida.
Por ejemplo los corchetes dobles:
[[ -f "/etc/debian_version" ]] && echo "This is a Debian flavor"
mientras que en los dialectos de concha tradicionales tendrías que recurrir a:
test -f "/etc/debian_version" && echo "This is a Debian flavor"
pero lo mejor de los corchetes dobles es que permiten expresiones regulares para la coincidencia. El Bash hackers Wiki le dará muchos trucos en esa dirección.
También puede usar expresiones bastante convenientes como $((2**10))
u otras expresiones aritméticas en línea con la $((expression))
sintaxis.
Usar backticks para subshells está bien, aunque un poco desactualizado. Pero las capacidades de anidación de las $(command ...)
invocaciones son mucho más convenientes, ya que no tendrá que escapar de muchas cosas en diferentes niveles de subshell.
Estas son solo algunas de las cosas que Bash le brinda sobre la sh
sintaxis POSIX común tradicional .
Pero si desea más potencia en el shell (no solo en scripts), también eche un vistazo zsh
.
/bin
y/usr/bin
. Como resultado, es probable que sea mejor usar#!/usr/bin/env <shname>
para la portabilidad en estos días.