Чрезмерно предопределенные переменные Bash с аргументами - PullRequest
3 голосов
/ 04 сентября 2010

Может кто-нибудь указать мне, в чем проблема, когда я хочу переопределить значение по умолчанию в переменной с аргументом в Bash? Следующий код не работает:

#!/bin/bash

VARIABLE1="defaultvalue1"
VARIABLE2="defaultvalue2"

# Check for first argument, if found, overrides VARIABLE1
if [ -n $1 ]; then
    VARIABLE1=$1
fi
# Check for second argument, if found, overrides VARIABLE2
if [ -n $2 ]; then
    VARIABLE2=$2
fi

echo "Var1: $VARIABLE1 ; Var2: $VARIABLE2"

Я хочу иметь возможность:

#./script.sh
Var1: defaultvalue1 ; Var2: defaultvalue2
#./script.sh override1
Var1: override1 ; Var2: defaultvalue2
#./script.sh override1 override2
Var1: override1 ; Var2: override2

Заранее спасибо:)

1 Ответ

7 голосов
/ 04 сентября 2010

Вам не хватает fi для первого if. Но на самом деле вам повезло: есть более простой способ сделать то, что вы делаете.

VARIABLE1=${1:-defaultvalue1}
VARIABLE2=${2:-defaultvalue2}

С man bash:

${parameter:-word}
Использовать значения по умолчанию. Если параметр не установлен или равен нулю, расширение слово заменяется. В противном случае подставляется значение параметра .

...