Например,
elif [[ $append = $1 ]]
then
touch ~/directory/"$2".txt
echo "$variable_in_question" >> ~/directory/"$2".txt
любому создают текстовый файл, содержащий весь вход после "$2"
, или добавьте файл существующего текста со всем входом после "$2"
, что я использовал бы вместо "$variable_in_question"
в строке 4?
Я в основном хочу "$*"
, но исключение "$1"
и "$2"
.
Можно использовать bash
Расширение параметра для определения диапазона это работает с позиционными параметрами также. Для $3
…$n
это было бы:
"${@:3}" # expands to "$3" "$4" "$5" …
"${*:3}" # expands to "$3 $4 $5 …"
Знайте это оба $@
и $*
проигнорируйте первый аргумент $0
. Если Вы задаетесь вопросом который использовать в Вашем случае: очень вероятно, что Вы хотите заключенный в кавычки $@
. Не использовать $*
если Вы явно не хотите, чтобы аргументы были заключены в кавычки индивидуально.
Можно испытать его следующим образом:
$ bash -c 'echo "${@:3}"' 0 1 2 3 4 5 6
3 4 5 6
$ echo 'echo "${@:3}"' >script_file
$ bash script_file 0 1 2 3 4 5 6
2 3 4 5 6
Обратите внимание на это в первом примере $0
заполнено первым аргументом 0
в то время как при использовании в сценарии $0
вместо этого заполнено названием сценария, как вторые шоу в качестве примера. Название сценария к bash
конечно, первый аргумент, просто что он обычно не чувствовал как таковой – то же идет для сценария, сделанного исполняемым файлом и названный “непосредственно”. Таким образом в первом примере мы имеем $0
=0
, $1
=1
и т.д., в то время как во втором это $0
=script_file
, $1
=0
, $2
=1
и т.д.; ${@:3}
выбирает каждый аргумент, запускающийся с $3
.
Некоторые дополнительные примеры для возможных диапазонов:
# two arguments starting with the third
$ bash -c 'echo "${@:3:2}"' 0 1 2 3 4 5 6
3 4
# every argument starting with the second to last one
# a negative value needs either a preceding space or parentheses
$ bash -c 'echo "${@: -2}"' 0 1 2 3 4 5 6
5 6
# two arguments starting with the fifth to last one
$ bash -c 'echo "${@:(-5):2}"' 0 1 2 3 4 5 6
2 3
Дальнейшее чтение:
Вы можете использовать встроенную функцию shift
:
$ help shift
shift: shift [n]
Shift positional parameters.
Rename the positional parameters $N+1,$N+2 ... to $1,$2 ... If N is
not given, it is assumed to be 1.
Exit Status:
Returns success unless N is negative or greater than $#.
Пример. учитывая
$ cat argtest.bash
#!/bin/bash
shift 2
echo "$*"
затем
$ ./argtest.bash foo bar baz bam boo
baz bam boo
Обычно можно скопировать позиционные параметры в массив, удалить произвольные индексы массива и затем использовать массив для расширения до точно тех индексов, которые Вы хотите, не теряя Ваши исходные аргументы.
Например, если я хотел весь args кроме первого, четвертого и пятого:
args=( "$@" )
unset args[0] args[3] args[4]
echo "${args[@]}"
В копии индексы смещаются на 1 с тех пор $0
не часть $@
.