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

Попытка иметь множественную переменную следовать за другой переменной, но я не получаю 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 
  • bash: Синтаксис около неожиданной ошибки '('
  • Как создать случайную строку в псевдониме профиля?
  • Как передать переменную скрипту KSH с CGI?
  • ошибки времени выполнения, откуда они взялись?
  • Автоматическое завершение вкладки не работает с apt-get install (kubuntu)
  • Ошибочно думать, что правило преуспело из-за 0-размерного файла, сгенерированного перенаправлением вывода
  • Переход к Linux
  • Портативный способ поиска номера inode
  • Возможно ли изменить сообщение об ошибке, вызванное расширением параметра, используя формат «$ {pattern:? Word}»?
  • Как я могу преобразовать эту функцию bash в оболочку рыбы
  • утечка памяти с помощью сценария оболочки и tty
  • Как добавить методы для спешки (Ruby shell)?
  • Interesting Posts

    Функция добавления двух чисел в awk

    sed backreference: получить каждую строку и добавить ее к концу строки

    Что происходит, когда я пишу нетекстовый файл?

    Не удалось обновить / обновить пакет Oh-My-Zsh с помощью команды `sudo pacman -S Oh-My-Zsh`

    Debian netinst с модемом usb

    Файл правила Udev для модема не работает

    SCP работает, но SSH не работает (по Wi-Fi)

    Bash – перенаправление вывода в переменную или файловый дескриптор, затем чтение из дескриптора переменной или файла

    Является ли Firefox для Linux вообще неустойчивым?

    Как я могу сохранить специальный символ, не заменяя его подчеркиванием?

    Восстановить исходную строку.h после случайной перезаписи

    Клавиатура Gnome-shell для «Внутреннего микрофона» на XF86Send

    Могу ли я редактировать информацию о исполняемых командах?

    Не удалось получить доступ к веб-сайту, размещенному на виртуальной машине

    Скопируйте первые 2 строки из файла, а затем удалите строки

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