複数の変数を別の変数の後に置きます。

複数の変数を別の変数の後に置きます。

複数の変数が異なる変数に従うことを試みますが、7つの異なるVOL変数は表示されません。

NME=(Y6T1 Y6-T1 Y6.T1 Yr6T1 Yr6-T1 Yr6.T1 Yr6Term1)
VOL=/Volumes/${NME}

for Copy in $VOL ; do
    echo $Copy
done

ベストアンサー1

zsh(構文を使用しているようなので)zsh次のようにします。

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

それ以外の場合は^配列の値に関連付けられているため、/Volumes/$nme最初の要素のみが追加されます。/Volumes//Volumes/

または、前述したように、配列変数の代わりにスカラー変数に割り当てると、最初の文字/Volumes/に関連付けられた配列要素に関連付けられます$IFS

ksh(またはでは動作が異なりますbash。これは$nme略語にすぎません${nme[0]}。)

接続許可^に追加されました$^nme分散化配列の各要素に。

これは^(not)演算子を連想させ、zshの変数拡張演算子の起源をrc説明できます。存在する:^^rc

nme=(Y6T1 Y6-T1 Y6.T1 Yr6T1 Yr6-T1 Yr6.T1 Yr6Term1)
vol=(/Volumes/^$nme)
for (Copy in $vol) printf '%s\n' $Copy

それは^必要ありません。vol=(/Volumes/$nme)効果は同じです。ここで重要なのは、rc接続が実際に分散していることです。しかし、^(単純に無視され廃棄された)、次のように見えます。連結演算子$nme^2これは($nme2nme2変数として扱われ、それ以外の場合は作成する必要があります)$'nme'2などの作業に役立ちます。

(にもbash適用されますzsh):

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

ここでは、${param/#pattern/replacement}配列の各要素に適用された引数先行パターン置換演算子()を使用します。ここでは、各要素の先頭にある空の文字列を)に置き換えます/Volumes/

その構文はから来ていますが、空のパターンが好きではないのでksh93動作しません。そこで上記の内容を次のように置き換える必要がksh93あります。は空のグループです。${nme[@]/#//Volumes/}${nme[@]/#@()//Volumes/}@()

もちろん、標準sh構文では常に次のようにすることができます。

set Y6T1 Y6-T1 Y6.T1 Yr6T1 Yr6-T1 Yr6.T1 Yr6Term1
for Copy do
  printf '/Volumes/%s\n' "$Copy"
done

または:

set Y6T1 Y6-T1 Y6.T1 Yr6T1 Yr6-T1 Yr6.T1 Yr6Term1
for Copy do
  Copy=/Volumes/$Copy
  printf '%s\n' "$Copy"
done

またはechoprintf実際に使用することに慣れる必要があります。)は単なるプレースホルダではなく、次のプレースホルダを1行に表示するだけです。

set Y6T1 Y6-T1 Y6.T1 Yr6T1 Yr6-T1 Yr6.T1 Yr6Term1
printf '/Volumes/%s\n' "$@"

または:

printf '/Volumes/%s\n' Y6T1 Y6-T1 Y6.T1 Yr6T1 Yr6-T1 Yr6.T1 Yr6Term1

おすすめ記事