Sie brauchen nichts Besonderes zu tun, zitieren Sie das einfach nicht *.
Kevin
1
Verwenden Sie ein Array, wie in der Antwort angegeben, wenn Sie versuchen, es zu analysieren.
Kevin
Antworten:
40
Lassen Sie es einfach in der rechten Seite einer Array-Deklaration expandieren:
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
Beachten Sie, dass die Shell-Option festgelegt werden nullglobmuss. Es ist nicht standardmäßig eingestellt.
Es verhindert einen Fehler, falls der Glob (oder einer von mehreren Globs) keinem Namen entspricht.
das geht nicht Zum Beispiel: TEST=$(echo your/stuff*) && eval \"$TEST\"wird ausgeben:your/stuff*: No such file or directory
Sebastian
@Sebastian Dies ist eine Nullglob-Ausgabe, siehe oben
Alexei Averchenko
1
Nein, es ist kein Nullglob-Problem. Bei der Verwendung von Scape-Zeichen wird die TESTVariable als Zeichenfolge ausgewertet , einschließlich *und nicht erweitert.
*
.Antworten:
Lassen Sie es einfach in der rechten Seite einer Array-Deklaration expandieren:
Beachten Sie, dass die Shell-Option festgelegt werden
nullglob
muss.Es ist nicht standardmäßig eingestellt.
Es verhindert einen Fehler, falls der Glob (oder einer von mehreren Globs) keinem Namen entspricht.
Stellen Sie es
bash
mit einoder in
zsh
mitquelle
unsetopt
und derselbe Parameter wie fürsetopt
.Keine Notwendigkeit, Dinge zu komplizieren:
quelle
TEST=$(echo your/stuff*) && eval \"$TEST\"
wird ausgeben:your/stuff*: No such file or directory
TEST
Variable als Zeichenfolge ausgewertet , einschließlich*
und nicht erweitert.