
list="name1 name2 name3 name4"
dir="/test/dir"
for i in $dir/${list};do echo $i;done;
Ich bekomme
/test/dir/name1
name2
name3
name4
Ich will
/test/dir/name1
/test/dir/name2
/test/dir/name3
/test/dir/name4
Hinweis: Ich habe derzeit eine funktionierende Lösung for i in ${list};do echo $dir/$i;done;
, würde aber gerne wissen, warum der obige Befehl nicht das gewünschte Ergebnis liefert und ob es eine Möglichkeit gibt, ihn zum Laufen zu bringen. Danke
Antwort1
aber ich würde gerne wissen, warum der obige Befehl nicht das gewünschte Ergebnis liefert
Die "$list"
Erweiterung als ein Argument/Element
list='name1 name2 name3 name4'; printf '<%s>\n' "$list"
Ausgabe
<name1 name2 name3 name4>
Wenn Sie ein Array verwenden, wird jedes Element einzeln erweitert umIFS
list=(name1 name2 name3 name4); printf '<%s>\n' "${list[@]}"
Ausgabe
<name1>
<name2>
<name3>
<name4>
Verwenden eines Arrays für die Liste.
list=(name{1..4}) ##: this expands to name1 name2 name4 because of brace expansion.
dir="/test/dir"
##: prefend "$dir/" in every element in the array list using /#/
for i in "${list[@]/#/"$dir/"}"; do
echo "$i"
done
Ausgabe
/test/dir/name1
/test/dir/name2
/test/dir/name3
/test/dir/name4
Oder wenn das Ziel nur darin besteht, den Pfad hinzuzufügen, können Sie einfach direkt drucken.
printf '%s\n' "${list[@]/#/"$dir/"}"