Как добавить аргумент к $@?

Я нашел проблему. Сценарий полностью устроил. Мой кард-ридер немного сломался после использования карты с кучей плохих блоков.

5
21.07.2019, 15:36
2 ответа

В частности, с zsh, в дополнение к стандартному set -- "$@"..., показанному @Kusalananda , позиционные параметры также доступны через массив $argv(, как в csh ), так что вы также можете сделать:

argv+=arg             # append one argument to the end
argv+=(arg2 arg3)     # append several arguments
argv[1,0]=(arg1 arg2) # insert in front
argv[3,0]=(x)         # insert before the 3rd element
2+=(x)                # same as above (insert after the 2nd)
2+=x                  # append x to the second argument (not to confuse with
                      # the above).
argv[2,5]=(y)         # replace 4 elements 2 to 5 with one y argument
argv[3,-1]=()         # truncate
1=()                  # same as "shift"
2
27.01.2020, 20:34

В любой оболочке POSIX

set -- "$@" "value"

добавит valueв конец списка позиционных параметров (фактически заменит список новым более длинным списком )и

set -- "value" "$@"

добавит его в начало (и технически будет обратным shift, поскольку shiftудаляет первый элемент ). Это верно для zsh.

--используется для защиты следующих значений от случайной интерпретации как опций, если они начинаются с -.

Специальная переменная $@используется почти исключительно как "$@", так как это расширяется до значения каждого позиционного параметра, указанного отдельно. Выражение "$@ somethingelse"расширится до списка отдельно цитируемых позиционных параметров, а <space>somethingelseбудет добавлено к последнему из них.

Чтобы использовать значения позиционных параметров в виде одиночной строки , разделенной пробелами (или любым другим первым символом $IFS, который может быть ), использование"$*"("$* somethingelse"правильно определено как одна строка ). Однако это не то, что вы хотите сделать в данном случае, так как это сведёт ваш список значений к одному единственному значению.

8
27.01.2020, 20:34

Теги

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