He practicado for
el control de flujo, haciendo referencia a un script de muestra como;
if [ $(id -u) = "0" ]; then
dir_list="/home/*"
else
dir_list=$HOME
fi
for home_dir in $dir_list; do
Lo anterior son líneas parcialmente citadas de "Control de flujo - Parte 3"http://linuxcommand.org/lc3_wss0130.php
Luego, para comprobar cómo se comporta el comodín de una variable en el for
control de flujo, probé las líneas siguientes;
#!/bin/bash
binlist="~/bin/*"
for i in $binlist; do
echo $i
done
Quería que el comodín se expandiera y que todos los archivos ~/bin/
se mostraran como resultados, pero no sucedió. La salida es simplemente ~/bin/*
.
Si no uso la variable y la asigno directamente ~/bin/*
a la lista de for
, sucede lo que espero: ~/bin/
se muestran todos los archivos.
PREGUNTA=====
¿Cómo puedo habilitar la expansión de un comodín en una variable?
¿O no entiendo bien lo que pretende el código de muestra del sitio de referencia?
==============
¡Gracias por leer mi pregunta!
Respuesta1
Puede utilizar la variable bash para su directorio de inicio en lugar de ~
.
La variable bash para su directorio de inicio es $HOME
por lo que su script debería verse así:
#!/bin/bash
binlist="$HOME/bin/*"
for i in $binlist; do
echo $i
done
Alternativamente, puedes usar /home/$USER
en lugar de $HOME
así:
#!/bin/bash
binlist="/home/$USER/bin/*"
for i in $binlist; do
echo $i
done
Puede ver cada una de estas variables ejecutando los siguientes comandos:
echo $HOME
echo $USER
Estos se enumeran en "Variables de Shell" en la página de manual de bash.
También,como lo menciona @John1024, la tilde no se expandirá $HOME
si se coloca entre comillas, por lo que su tercera opción sería usar lo siguiente:
#!/bin/bash
binlist=~/"bin/*"
for i in $binlist; do
echo $i
done
ycomo lo menciona @ bac0nLas comillas no son necesarias aquí, por lo que también puedes usar lo siguiente:
#!/bin/bash
binlist=~/bin/*
for i in $binlist; do
echo $i
done