Estoy tratando de hacer un bucle for simple en un script UNIX (bash).
Aquí está mi guión:
for i in {1..3} do echo "Welcome $i times" doneEsperaba esto para la salida ...
Welcome 1 times Welcome 2 times Welcome 3 times... pero entiendo esto ...
Welcome {1..3} times¿Qué estoy haciendo mal?
No mencionaste cómo estabas ejecutando tu script y eso puede marcar la diferencia. Supongamos que tenemos un script:
$ cat welcome.sh for i in {1..3} do echo "Welcome $i times" done echo "\n"Observe las siguientes tres invocaciones de welcome.sh desde un shell bash:
$ ps -p $$ PID TTY TIME CMD 11509 pts/25 00:00:00 bash $ source welcome.sh Welcome 1 times Welcome 2 times Welcome 3 times $ bash welcome.sh Welcome 1 times Welcome 2 times Welcome 3 times $ sh welcome.sh Welcome {1..3} times El último falla porque, en mi sistema, sh está predeterminado en dash , no en bash . Esto es cierto, por ejemplo, para cualquier sistema moderno derivado de Debian/Ubuntu.
Moviendo mi comentario a la respuesta formal:
set -o braceexpand Eso permite la expansión del estilo {x..y} (entre otros tipos de). Si lo quiere permanentemente, agréguelo a su .bashrc . Si lo desea temporalmente, puede "entre paréntesis" su código:
set -o braceexpand # enable brace expansion echo {1..3} # or whatever your command is set +o braceexpand # disable it Francamente, creo que la sobrecarga de código de ese enfoque de encendido/apagado no vale la pena, y siempre agrego la expansión de llaves a mi .bashrc .
Finalmente, aquí hay una excelente discusión sobre los pros y contras de la expansión de los aparatos ortopédicos.
Varias cosas para probar:
bash myscript.sh en lugar de simplemente myscript.sh . Esto garantizará que se está ejecutando bajo BASH.set -o y vea si braceexpansion está activado . De lo contrario, ejecute set -o braceexpand y vea si eso soluciona su problema. Puede comprobar si braceexpand está activado o desactivado con la prueba -o .
if [[ -o braceexpand ]] then echo "Brace expand is on" else echo "It is off" fiPuede usar esto para probar el estado de braceexpand , para que pueda devolverlo a su estado anterior.