Pratiquei for
o controle de fluxo, referenciando um script de exemplo como;
if [ $(id -u) = "0" ]; then
dir_list="/home/*"
else
dir_list=$HOME
fi
for home_dir in $dir_list; do
O texto acima é parcialmente citado em "Flow Control - Part 3"http://linuxcommand.org/lc3_wss0130.php
Então, para verificar como o curinga de uma variável se comporta no for
controle de fluxo, tentei as linhas abaixo;
#!/bin/bash
binlist="~/bin/*"
for i in $binlist; do
echo $i
done
Eu queria que o curinga se expandisse e todos os arquivos ~/bin/
fossem exibidos como saídas, mas isso não aconteceu. A saída é apenas ~/bin/*
.
Se eu não usar a variável e atribuir diretamente ~/bin/*
na lista de for
, o que espero que aconteça, todos os arquivos ~/bin/
serão exibidos.
PERGUNTA =====
Como posso ativar a expansão de um curinga na variável?
Ou estou entendendo mal o que o código de exemplo do site de referência pretende?
=============
Obrigado por ler minha pergunta!
Responder1
Você pode usar a variável bash para seu diretório inicial em vez de ~
.
A variável bash para o seu diretório inicial é $HOME
para que seu script fique assim:
#!/bin/bash
binlist="$HOME/bin/*"
for i in $binlist; do
echo $i
done
Alternativamente, você poderia usar /home/$USER
em vez $HOME
disso:
#!/bin/bash
binlist="/home/$USER/bin/*"
for i in $binlist; do
echo $i
done
Você pode visualizar cada uma dessas variáveis executando os seguintes comandos:
echo $HOME
echo $USER
Eles estão listados em "Variáveis do Shell" na página de manual do bash.
Também,conforme mencionado por @ John1024, o til não será expandido $HOME
se for colocado entre aspas, então sua terceira opção seria usar o seguinte:
#!/bin/bash
binlist=~/"bin/*"
for i in $binlist; do
echo $i
done
econforme mencionado por @bac0nas aspas não são necessárias aqui, então você também pode usar o seguinte:
#!/bin/bash
binlist=~/bin/*
for i in $binlist; do
echo $i
done