2012-12-07 12 views
17

पर असाइन करना मैं बैश में स्थितित्मक पैरामीटर के लिए मान कैसे निर्दिष्ट कर सकता हूं? मैं एक डिफ़ॉल्ट पैरामीटर के लिए एक मान असाइन करना चाहता हूं:एक स्थितित्मक पैरामीटर

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

इंगित करना कि 4 कमांड नहीं है।

उत्तर

29

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 

आप भी पैरामीटर पर देखने -z के लिए $# बजाय परीक्षण गिनती करने के लिए चाहते हो सकता है के रूप में और अधिक स्पष्ट हो जाएगा।

3

आप एक चौथा पैरामीटर के साथ फिर से अपनी स्क्रिप्ट को फोन करके आप क्या चाहते हैं कर सकते हैं:

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

./script.sh one two three इच्छा उत्पादन की तरह स्क्रिप्ट ऊपर कॉलिंग:

तीन

+0

'./ यदि $ PATH के माध्यम से स्क्रिप्ट का उपयोग किया जाता है तो $ 0' काम नहीं करेगा, '$ 0'' ठीक से होना चाहिए जो '/ script' और'/usr/local/bin/script' आदि के लिए काम करेगा। – msw

संबंधित मुद्दे