Expansão de caractere curinga de Bash (2)

1

Me desculpe se isso é muito simples ou foi coberto antes ... mas espero que alguém aqui possa ajudar. Não consigo descobrir como expandir o curinga * em um nome de caminho, a menos que seja seguido por um espaço. Por exemplo,

echo $path* $dir

rendimentos

/Data0001 /subfolder 

que é o que eu quero, mas sem o espaço. Se eu tentar tirar o espaço com

echo $path*$dir

Eu recebo

/Data*/subfolder

Alguma dica de como expandir * sem o espaço em branco?

Obrigado.

    
por M Fero 21.08.2012 / 07:23

3 respostas

4

Coloque o (s) nome (s) da variável em chaves, por exemplo:

echo ${path}*${dir}
    
por 21.08.2012 / 07:26
1

Ele está fazendo correspondência de padrões na palavra inteira, não apenas na ${path}* part - então se $ path era "/" e $ dir era "/ subdirname", ele procuraria correspondências para /*/subdirname , que essencialmente procura diretórios em / que contenham subdiretórios denominados subdirename. Se você quiser encontrar diretórios que ainda não contêm / subdirname, você deve deixar isso fora de padrão e adicioná-lo posteriormente. Veja um exemplo que armazena as correspondências em uma matriz e adiciona o subdiretório:

path="/"
dir="/subdirname"
matchedDirs=("$path"*)
echo "${matchedDirs[@]/%/$dir}"

Se a construção final for difícil de entender, a parte [@] significa "todos os elementos da matriz, cada um tratado como uma palavra separada", e /%/$dir significa "substituir a extremidade (de cada elemento) por $ dir "(ou seja, anexar $ dir a cada elemento da matriz).

    
por 21.08.2012 / 08:58
0

Altere para

dir=/Data sub=subfolder
echo $dir*/$sub

.

dir=/Data* sub=subfolder
echo $dir/$sub

também funcionaria

    
por 25.08.2012 / 22:02

Tags