Присвоение позиционного параметра
Как назначить значение позиционному параметру в Bash? Я хочу присвоить значение параметру по умолчанию:
if [ -z "$4" ]; then
4=$3
fi
Указание на то, что 4 не является командой.
Ответы
Ответ 1
Встроенный set
- единственный способ установить позиционные параметры
$ set -- this is a test
$ echo $1
this
$ echo $4
test
где --
защищает от объектов, которые выглядят как параметры (например, -x
).
В вашем случае вы можете:
if [ -z "$4" ]; then
set -- "$1" "$2" "$3" "$3"
fi
но, вероятно, было бы более понятно, как
if [ -z "$4" ]; then
# default the fourth option if it is null
fourth="$3"
set -- "$1" "$2" "$3" "$fourth"
fi
вы также можете посмотреть на параметр count $#
вместо тестирования для -z
.
Ответ 2
Вы можете сделать то, что хотите, снова вызвав script с четвертым параметром:
if [ -z "$4" ]; then
$0 "$1" "$2" "$3" "$3"
exit $?
fi
echo $4
Вызов выше script как ./script.sh one two three
будет выводить:
три
Ответ 3
Это можно сделать с помощью присваивания непосредственно во вспомогательный массив с механизмом типа экспорта/импорта:
set a b c "d e f" g h
thisArray=( "[email protected]" )
thisArray[3]=4
set -- "${thisArray[@]}"
echo "[email protected]"
выходы "ABC 4 г ч"