
list="name1 name2 name3 name4"
dir="/test/dir"
for i in $dir/${list};do echo $i;done;
我明白了
/test/dir/name1
name2
name3
name4
我想
/test/dir/name1
/test/dir/name2
/test/dir/name3
/test/dir/name4
注意:我目前有一個可行的解決方案for i in ${list};do echo $dir/$i;done;
,但想知道為什麼上述命令沒有產生預期的結果,以及是否有任何調整可以使其發揮作用。謝謝
答案1
但想知道為什麼上述命令沒有產生預期的結果
擴展"$list"
為一個參數/元素
list='name1 name2 name3 name4'; printf '<%s>\n' "$list"
輸出
<name1 name2 name3 name4>
如果您使用數組,它會將每個元素分開擴展IFS
list=(name1 name2 name3 name4); printf '<%s>\n' "${list[@]}"
輸出
<name1>
<name2>
<name3>
<name4>
使用數組作為列表。
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
輸出
/test/dir/name1
/test/dir/name2
/test/dir/name3
/test/dir/name4
或者,如果目標只是新增路徑,您可以直接列印。
printf '%s\n' "${list[@]/#/"$dir/"}"