Em zsh (já que você parece estar usando a sintaxe zsh ), você faria:
nme=(Y6T1 Y6-T1 Y6.T1 Yr6T1 Yr6-T1 Yr6.T1 Yr6Term1)
vol=(/Volumes/$^nme)
for Copy in $vol; do
printf '%s\n' $Copy
done
Sem o ^ , /Volumes/$nme seria a concatenação de /Volumes/ com os valores da matriz, então apenas o primeiro elemento teria /Volumes/ pré-anexado a ele.
Ou, ao atribuir a uma variável escalar em vez de uma variável de matriz, como você fez, seria /Volumes/ concatenado com os elementos da matriz associados ao primeiro caractere de $IFS .
(observe que o comportamento seria diferente em ksh ou bash , em que $nme é apenas a abreviação de ${nme[0]} ).
Adicionar ^ em $^nme permite que a concatenação seja distribuída para cada elemento da matriz.
Esse ^ faz lembrar o operador% non_ ( rc ) e possivelmente explica a origem desse operador de expansão de variável ^ zsh. Em ^ :
nme=(Y6T1 Y6-T1 Y6.T1 Yr6T1 Yr6-T1 Yr6.T1 Yr6Term1)
vol=(/Volumes/^$nme)
for (Copy in $vol) printf '%s\n' $Copy
Esse rc não é necessário. ^ funcionaria da mesma forma. O ponto aqui é que vol=(/Volumes/$nme) distribui a concatenação. No entanto, rc (que é apenas ignorado e descartado) pode ser visto como um operador de concatenação porque facilita coisas como ^ ( $nme^2 seria tratado como a variável nme2, você precisaria para escrever $nme2 caso contrário.
Em $'nme'2 (também funciona em bash ):
nme=(Y6T1 Y6-T1 Y6.T1 Yr6T1 Yr6-T1 Yr6.T1 Yr6Term1)
vol=("${nme[@]/#//Volumes/}")
for Copy in "${vol[@]}"; do
printf '%s\n' "$Copy"
done
Aqui, estamos usando o operador de substituição de padrão principal do parâmetro ( zsh ) aplicado a cada elemento da matriz.
Aqui, estamos substituindo a string vazia no início de cada elemento por ${param/#pattern/replacement} ).
Embora essa sintaxe venha de /Volumes/ , ela não funciona em ksh93 , pois não gosta desse padrão vazio. Lá, você precisa substituir ksh93 acima por ${nme[@]/#//Volumes/} , por exemplo. ${nme[@]/#@()//Volumes/} é um grupo vazio.
Claro, na sintaxe @() padrão, você sempre pode fazer:
set Y6T1 Y6-T1 Y6.T1 Yr6T1 Yr6-T1 Yr6.T1 Yr6Term1
for Copy do
printf '/Volumes/%s\n' "$Copy"
done
ou:
set Y6T1 Y6-T1 Y6.T1 Yr6T1 Yr6-T1 Yr6.T1 Yr6Term1
for Copy do
Copy=/Volumes/$Copy
printf '%s\n' "$Copy"
done
Ou se assumir que sh ( você realmente deveria se acostumar a usar echo ) não foi apenas um espaço reservado e tudo o que você quer fazer é exibir esses por linha:
set Y6T1 Y6-T1 Y6.T1 Yr6T1 Yr6-T1 Yr6.T1 Yr6Term1
printf '/Volumes/%s\n' "$@"
Ou:
printf '/Volumes/%s\n' Y6T1 Y6-T1 Y6.T1 Yr6T1 Yr6-T1 Yr6.T1 Yr6Term1