यह प्रश्न मेरे पहले के प्रश्न का एक क्रम है । इस साइट पर उपयोगकर्ताओं ने मुझे यह निर्धारित करने में मदद की कि कैसे 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 ]]
है इसलिए यह सुरक्षित है।