यह प्रश्न मेरे पहले के प्रश्न का एक क्रम है । इस साइट पर उपयोगकर्ताओं ने मुझे यह निर्धारित करने में मदद की कि कैसे forस्ट्रिंग मानों पर चलने वाले बैश लूप को लिखना है । उदाहरण के लिए, मान लें कि एक लूप नियंत्रण चर fnameस्ट्रिंग्स पर पुनरावृत्त करता है "a.txt" "b.txt" "c.txt"। मैं echo"हाँ!" जब fnameमूल्य है "a.txt"या "c.txt", और echo"नहीं!" अन्यथा। मैंने निम्नलिखित बैश शेल स्क्रिप्ट की कोशिश की है:
#!/bin/bash
for fname in "a.txt" "b.txt" "c.txt"
do
echo $fname
if [ "$fname" = "a.txt" ] | [ "$fname" = "c.txt" ]; then
echo "yes!"
else
echo "no!"
fi
done
मैं आउटपुट प्राप्त करता हूं:
a.txt
नहीं!
b.txt
नहीं!
c.txt
हाँ!
ifजब fnameमूल्य है तो बयान स्पष्ट रूप से सही क्यों है "a.txt"? क्या मैंने |गलत तरीके से इस्तेमाल किया है?
3
बैश में, 'या' ऑपरेटर 'है || (सी शैली)।
—
मेरीस कोटोफ़ाना
तुम भी
—
थॉर
-oउसी के भीतर उपयोग कर सकते हो [ ]।
@ मैं पसंद करूंगा
—
jw013
||और पोर्टेबिलिटी के लिए अलग [ ]कर दूंगा -oक्योंकि [4 से अधिक तर्कों का समर्थन करने की गारंटी नहीं है। बेशक लक्ष्य भाषा है अगर bash, कोई भी का उपयोग कर किया जाना चाहिए [वैसे भी, क्योंकि bashके [[कई मायनों में बेहतर है।
@ jw013 धन्यवाद। क्या इसका मतलब यह है कि मुझे इसके
—
एंड्रयू
if [[ "$fname" = "a.txt" ]] || [[ "$fname" = "c.txt" ]]बजाय उपयोग करना चाहिए if [ "$fname" = "a.txt" ] || [ "$fname" = "c.txt" ]?
@ और यह सही है, यदि आप शेबंग की घोषणा कर रहे हैं
—
jw013
bash, जैसा कि आप पहले से ही कर रहे हैं। इसका एक फायदा [[यह है कि यह शब्द विभाजन (विशेष मामले) नहीं करता [[ $unquoted_var = string ]]है इसलिए यह सुरक्षित है।