Подтвердить что ты не робот

Присвоение позиционного параметра

Как назначить значение позиционному параметру в Bash? Я хочу присвоить значение параметру по умолчанию:

if [ -z "$4" ]; then
   4=$3
fi

Указание на то, что 4 не является командой.

4b9b3361

Ответ 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 г ч"