변수에 정의된 이름 목록을 반복합니다.

변수에 정의된 이름 목록을 반복합니다.
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/"}"

관련 정보