जस्टिन ने क्वांटा के जवाब पर अपनी पहली टिप्पणी में अपना प्रश्न स्पष्ट किया। वह पाठ की एक पंक्ति में पढ़ रहा है read
(या किसी अन्य गतिशील माध्यम से) और टिल्ड का विस्तार करना चाहता है।
सवाल यह है कि "आप एक चर की सामग्री पर टिल्ड विस्तार कैसे करते हैं?"
सामान्य दृष्टिकोण का उपयोग करना है eval
, लेकिन यह >
चर में कुछ महत्वपूर्ण कैविटीज़, अर्थात् रिक्त स्थान और आउटपुट पुनर्निर्देशन ( ) के साथ आता है । निम्नलिखित मेरे लिए काम करता है:
read -p "Provide the destination directory: " DESTINATION
if [ ! -d "`eval echo ${DESTINATION//>}`" ]; then
echo "'$DESTINATION' does not exist." >&2;
exit 1;
fi
निम्नलिखित प्रत्येक इनपुट के साथ इसे आज़माएँ:
~
~/existing_dir
~/existing dir with spaces
~/nonexistant_dir
~/nonexistant dir with spaces
~/string containing > redirection
~/string containing > redirection > again and >> again
व्याख्या
${mypath//>}
बाहर स्ट्रिप्स >
पात्रों जिसके दौरान एक फ़ाइल मार सकता है eval
।
eval echo ...
क्या वास्तविक टिल्ड विस्तार करता है
- डबल-कोट्स
eval
रिक्त स्थान के साथ फ़ाइल नाम के समर्थन के लिए हैं।
इसके पूरक के रूप में, आप -e
पढ़ने के विकल्प को जोड़कर UX में सुधार कर सकते हैं:
read -p "Provide the destination directory: " -e DESTINATION
अब जब उपयोगकर्ता टिल्ड और हिट टैब में टाइप करता है, तो उसका विस्तार होगा। यह दृष्टिकोण उपर्युक्त दृष्टिकोण को प्रतिस्थापित नहीं करता है , हालांकि, जैसा कि विस्तार केवल तब होता है जब उपयोगकर्ता टैब हिट करता है। यदि वह सिर्फ ~ / फू और हिट में टाइप करता है, तो यह एक टिल्ड के रूप में रहेगा।
यह सभी देखें:
cd "~/Desktop"
आपको एक त्रुटि भी मिलती है। इसे अयोग्य या एक चर के रूप में संग्रहीत किया जाना है (उद्धरण के बिना)। उदाहरण के लिए,a=~/Desktop; cd $a;
काम करता है, लेकिन नहींa="~/Desktop"; cd Desktop;
देखें serverfault.com/questions/417252/...