Siga las indicaciones de los Autotools: manténgase en el mínimo común denominador de Bourne y POSIX shell, posiblemente aumentado por sed
, si tiene que escribir algo que debe funcionar en todas partes . Es posible que existan sistemas en los que algo se rompa, pero puede solucionar estos problemas reescribiendo.
Por ejemplo, algunos sistemas antiguos tienen problemas con errores de expansión test
, también conocidos como [
:
if [ $foo = bar ] ; then...
así que la práctica de Autoconf es reescribirlo entre comillas dobles con un prefijo de un solo carácter, así:
if [ x"$foo" = "xbar" ] ; then...
También puedes usar "x$foo"
aquí. Esto protege contra la posibilidad de que $foo
pueda ser una opción válida test(1)
y, como [
es un alias test
, podría malinterpretar la expresión. La solución es establecer una situación en la que [
siempre comience el argumento desconocido x
, lo que significa que no puede tener un significado especial [
.
(Autoconf también recomienda usar en test
lugar de [
, pero ese consejo surge como una reacción a posibles conflictos con M4 , que también usa [
en su sintaxis).
awk es POSIX , por lo que teóricamente está disponible en todas partes. Incluso está en Busybox , por lo que tendrá una awk
implementación incluso en algunos sistemas Linux integrados muy restrictivos. Aún así, me sorprendería menos encontrar un sistema sin él awk
que sed
. Supongo que todo se reduce a la complejidad: las herramientas más simples tienen más probabilidades de sobrevivir al triaje agresivo.
Perl no forma parte de ningún estándar generalizado, POSIX o de otro tipo, por lo que simplemente no puede contar con él si no sabe nada de antemano sobre el entorno de destino. Perl no está instalado por defecto en:
- Cygwin
- FreeBSD y NetBSD
- instalaciones "mínimas" para algunos Linux, incluido Slackware
- muchos Linux embebidos que dependen principalmente de Busybox para su país de usuario
El manual de Autoconf tiene un capítulo sobre programación de shell portátil que debería serle útil. Las herramientas de última sección cubre gusta sed
, awk
y muchos otros.