शेल स्क्रिप्ट मुझे बहुत अधिक तर्क त्रुटि क्यों देती है? - बाश, खोल

#! /bin/bash

if [ !(-f new.bash -o -d new.bash) ]
then
echo "Neither"
else
echo "yes"
fi

यह काम करता है लेकिन एक त्रुटि छोड़ देता है:

/file_exist_or_not.bash
./file_exist_or_not.bash: line 3: [: too many arguments
yes

बीटीडब्लू, क्यों आंतरिक कोष्ठक से बचने की जरूरत है?

उत्तर:

जवाब के लिए 3 № 1

बैश टोकन को अलग करने के लिए रिक्त स्थान का उपयोग करता है, जिसे बाद में आदेशों के तर्क के रूप में पारित किया जाता है (इस मामले में आदेश होता है test)। के लिए मैन पेज देखें test अधिक जानकारी के लिए।

हल करने के लिए, आपको ऑपरेटरों के बीच रिक्त स्थान जोड़ने की आवश्यकता है।

if [ ! ( -f new.bash -o -d new.bash ) ]

जवाब के लिए 2 № 2

यदि आप उपयोग कर रहे हैं bash और POSIX संगतता को छोड़ने पर ध्यान न दें, निम्नलिखित थोड़ा आसान है:

if [[ ! ( -f new.bash || -d new.bash ) ]]; then

आप उपयोग कर सकते हैं || के बजाय -o, और कोष्ठक से बचने की जरूरत नहीं है।


संबंधित सवाल
सबसे लोकप्रिय