Поместите несколько переменных после другой переменной

Попытка иметь множественную переменную следовать за другой переменной, но я не получаю 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 

One Solution collect form web for “Поместите несколько переменных после другой переменной”

В 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 позволяет конкатенации распределяться по каждому элементу массива.

Это ^ напоминает rc 's (не) -оператор и, возможно, объясняет происхождение этого оператора zz переменной разложения. В 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 ( $nme2 будет рассматриваться как переменная nme2, вам нужно записать $'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 

Или если предположить, что ваше echo ( вы действительно должны привыкнуть к использованию printf ) было не просто владельцем места, и все, что вы хотите сделать, это отобразить их по одной строке:

 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 
  • Как передать программе comand-line список файлов из каталога?
  • Преобразуйте значение в «двоичный номер» в сценарии оболочки
  • Как записать содержимое нескольких файлов в один файл в Unix?
  • Принудительно создать жесткую ссылку (ы) каталога?
  • Подача звука с микрофона в питон
  • Удалите ^ C, когда CTRL + C
  • .shinit против .shrc
  • Оператор match-zero-or-more в оболочке
  • скрипт crontab по сравнению с ручным запуском
  • Shell glob - заменить файл path arg с содержимым файла
  • Что такое расщепление слов? Почему это важно в программировании оболочки?
  • Interesting Posts

    «найти» для нечувствительных к регистру слов?

    make wget ссылается на локальную копию без избыточной загрузки файлов

    Связать локально установленную библиотеку

    Выполняется непосредственно через TTY более безопасно, чем через эмулятор терминала?

    Есть ли такой оператор, как &&, который игнорирует статус возврата?

    Извлечь часть одной строки и отсортировать

    загрузочный раздел почти заполнен в CentOS

    вставлять переменный текст после другого текста переменной на определенной строке

    Как перенаправить стандартный ввод инструкции `while` в файл?

    Как искать несколько шаблонов поиска из файла с помощью grep

    Как читать '\ n' в переменную с помощью встроенной команды Bash?

    mount не печатает установленные разделы

    ISC DHCPD для регистрации или обновления BIND DNS с именем хоста клиента

    Как отключить сглаживание в git-gui и gitk

    Могу ли я подключить порт lpt через tcp?

    Linux и Unix - лучшая ОС в мире.