मैं एक ऐसी स्क्रिप्ट लिखने की कोशिश कर रहा हूं जो तर्क के आधारनाम को लेता है, फिर जांच करता है कि उस तर्क में कोई एक्सटेंशन है या नहीं। यदि ऐसा है, तो यह एक्सटेंशन प्रिंट करता है।बैश बेसनाम नाम वाक्य
file=basename $1
ext=${file%*}
echo ${file#"$stub"}
echo $basename $1
मैं क्या basename का उत्पादन होता है की जाँच करने के लिए अंतिम $ basename गूंज रहा हूँ $ 1:
यहाँ मेरी कोड है।
कुछ परीक्षण से पता चलता है:
testfile.sh one.two
./testfile: line 2: one.two: command not found
one.two
testfile.sh ../tester
./testfile: line 2: ../tester: No such file or directory
../tester
तो न $ basename $ 1 काम कर रहे हैं। मुझे पता है कि यह एक वाक्यविन्यास त्रुटि है, तो क्या कोई यह समझा सकता है कि मैं क्या गलत कर रहा हूं?
संपादित करें:
मैं के साथ अब मेरी समस्या हल कर लिए हैं:
file=$(basename "$1")
stub=${file%.*}
echo ${file#"$stub"}
जो एक basename करने के लिए अपने तर्क कम कर देता है, आप सभी को धन्यवाद।
सही वाक्यविन्यास फ़ाइल = $ (बेसनाम $ 1) है। मैं आपको फ़ाइल = $ {1 ## * /} का उपयोग करने की सलाह दूंगा, जो प्रत्येक '* /' अनुक्रम को हटा देगा। यह बेसनाम कमांड की तुलना में वास्तव में बहुत तेज है, खासकर जब लूप में फ़ाइलों को संसाधित करते हैं। –