Присвоение позиционного параметра Как назначить значение позиционному параметру в 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 г ч"
Ответ 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 г ч"