Nie musisz robić nic specjalnego, tylko nie cytuj *.
Kevin
1
Chociaż jeśli chcesz to przeanalizować, użyj tablicy, jak mówi odpowiedź.
Kevin
Odpowiedzi:
40
Po prostu pozwól mu rozwinąć się po prawej stronie deklaracji tablicowej:
list=(../smth*/)# grab the list
echo "${#list[@]}"# print array length
echo "${list[@]}"# print array elementsfor file in"${list[@]}";do echo "$file";done# loop over the array
Pamiętaj, że nullglobnależy ustawić opcję powłoki . To nie jest ustawione domyślnie.
Zapobiega to błędom w przypadku, gdy glob (lub jeden z wielu globów) nie pasuje do żadnej nazwy.
*
.Odpowiedzi:
Po prostu pozwól mu rozwinąć się po prawej stronie deklaracji tablicowej:
Pamiętaj, że
nullglob
należy ustawić opcję powłoki .To nie jest ustawione domyślnie.
Zapobiega to błędom w przypadku, gdy glob (lub jeden z wielu globów) nie pasuje do żadnej nazwy.
Ustaw za
bash
pomocąlub
zsh
zźródło
unsetopt
i ten sam parametr, co używany dlasetopt
.Nie trzeba nadmiernie komplikować rzeczy:
źródło
TEST=$(echo your/stuff*) && eval \"$TEST\"
wyświetli:your/stuff*: No such file or directory
TEST
zmienną jako ciąg zawierający*
i nie rozwijany.