Снабдите префиксом каждый спор с-o в Bash

Можно проверить дважды, если ключ уже импортируется с помощью rpm -qi gpg-pubkey-<version>-<release>. Если это будет установлено, то об/мин даст Вам всю информацию об этом, в противном случае это просто выйдет с возвращаемым значением 1, таким образом, Вы могли добавить к своему марионеточному рецепту unless параметр:

exec { "rpm --import /path/to/package":
  # ...
  unless => "rpm -qi gpg-pubkey-<version>-<release> > /dev/null 2>&1"
}
3
14.07.2011, 06:34
3 ответа

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

#!/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
4
27.01.2020, 21:15
  • 1
    , Который похож, это - то, в чем я нуждаюсь, но к сожалению я не могу выяснить, как заставить это работать на функцию, а не сценарий (который является тем, что Вы имеете). Какие-либо идеи? –  user541686 15.07.2011, 08:31
  • 2
    Просто вырезал и вставил все это в argparse() { ... } функциональный блок - Это работает просто великолепно здесь. –  l0b0 15.07.2011, 10:15
  • 3
    Хорошо я думаю, что у меня на самом деле была проблема с использованием xargs на функции, но это фиксируется теперь;спасибо! –  user541686 15.07.2011, 10:41

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

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

Это заменяет запуск каждого аргумента с -p<space>.

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

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

1
27.01.2020, 21:15

Можно сохранить пробелы в ${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="".

1
27.01.2020, 21:15

Теги

Похожие вопросы