Префикс каждого аргумента с -o в BASH

Как префикс -p для каждого аргумента, переданного моей функции?

Модификация самих аргументов и создание нового массива прекрасны.

3 Solutions collect form web for “Префикс каждого аргумента с -o в BASH”

Это должно работать хорошо даже для сложных аргументов с пробелами и худшими:

 #!/bin/bash new_args=() for arg do new_args+=( '-p' ) new_args+=( "$arg" ) done for arg in "${new_args[@]}" do echo "$arg" done 

Контрольная работа:

 $ ~/test.sh foo $'bar\n\tbaz bay' -p foo -p bar baz bay 

Поместите аргументы в массив и используйте подстановку шаблонов bash на них с подстановкой массива и сопоставлением префикса:

 ARGS=("$@") echo ${ARGS[@]/#/-p } 

Это заменяет начало каждого arg с -p<space> .

К сожалению, это не работает должным образом, если в ваших аргументах есть пробелы. Пространства сохраняются должным образом с помощью ARGS=("$@") , но не тогда, когда вы выполняете расширение ${ARGS[@]/#/-p } . Вы можете поместить двойные кавычки вокруг этого расширения, но затем вы получите -p arg1 как один аргумент, а не два аргумента.

Если вам не нужно использовать -p<space> , просто -p тогда двойные кавычки вокруг расширения должны работать нормально. Экспериментируйте с и без двойных кавычек вокруг расширения, чтобы увидеть, что лучше всего подходит для вас.

Вы можете сохранить пробелы в расширении ${ARGS[@]/#/-p } если вы установите переменную IFS в пустую строку!

 # sample code ( set -- 1 2 3 'arg with spaces' $'bar\n\tbaz bay' printf 'oldIFS: %q\n' "$IFS" IFS="" #IFS=" " printf 'newIFS: %q\n' "$IFS" ARGS=("$@") ARGS=( ${ARGS[@]/#/-p } ) for ((i=0; i < ${#ARGS[@]}; i++)); do echo "$i: ${ARGS[i]}" done ) 

Внутри функции вы можете ограничить область измененной переменной IFS этой функцией, используя declare IFS="" .

  • / bin / sh: определение функции импорта ошибок для `some-function '
  • Отслеживать определенные параметры для некоторой команды
  • Можно ли добавить функцию внутри функции?
  • Передача блока кода как анона. функция
  • Псевдоним и функции
  • Функция Bash присваивает значение переданному параметру
  • Слияние команды с параметром, переданным другой команде
  • Отобразить тело функции в Bash
  • Что происходит в этой функции?
  • Функция в функции не будет вызвана несколько раз, если потребуется?
  • как предотвратить расширение псевдонимов `eval` до произвольного псевдонима и сохранить бесконечную защиту цикла от функции?
  • Как я могу загрузить несколько файлов в мой .bashrc?
  • Interesting Posts

    Как я могу включить журналы fail2ban и mod_secure для отображения в logwatch на centos 6.4?

    Как рассчитывается размер каталога?

    autofs не отключается после неактивного

    Почему мое приложение не получает широковещательные пакеты?

    Использование SMB для соединения содержимого файла с локальной командой на локальной машине

    Прогулки Многомерные массивы в Mawk

    Сохраните файл с сохранением файла emacs без доступа к терминалу

    Загрузите графическое приложение прямо из загрузки Linux (без подробных загрузочных сообщений и рабочего стола)

    Как отложить выключение с помощью systemd?

    Почему я все еще вижу MOTD при входе в SSH?

    Изменение настроек XRANDR

    Доступ к нескольким Wi-Fi-сетям одновременно с debian wheezy

    MobaXterm: Как видеть вывод терминала на предыдущих командах, все еще находясь в VIM? (Эквивалент «Shift + Page Up» в PuTTY)

    awk, sed, grep, perl … которые распечатываются в этом случае?

    Как изменить привязки клавиш на основе того, какое окно сфокусировано?

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