2012-12-07 19 views

Antwort

29

Die set eingebaut ist die einzige Möglichkeit, Positionsparameter

$ set -- this is a test 
$ echo $1 
this 
$ echo $4 
test 

wo die -- schützt gegen Dinge zu setzen, wie Optionen aussehen (z -x).

In Ihrem Fall sollten Sie: für -z

if [ -z "$4" ]; then 
    set -- "$1" "$2" "$3" "$3" 
fi 

aber es wäre wahrscheinlich $# statt Tests zählen zu den Parameter als

if [ -z "$4" ]; then 
    # default the fourth option if it is null 
    fourth="$3" 
    set -- "$1" "$2" "$3" "$fourth" 
fi 

Sie auch aussehen könnte wollen mehr klar sein.

3

Sie können tun, was Sie wollen von Ihrem Skript erneut mit einem vierten Parameter Aufruf:

if [ -z "$4" ]; then 
    $0 "$1" "$2" "$3" "$3" 
    exit $? 
fi 
echo $4 

obige Skript aufrufen wie ./script.sh one two three ausgeben wird:

drei

+0

'./ $ 0' funktioniert nicht, wenn das Skript über PATH aufgerufen wird, '$ 0' sollte in Ordnung sein, was für'./Script' und '/ usr/local/bin/script' usw. funktionieren würde. – msw

Verwandte Themen