StackOverflow उत्तर के साथ> 3.5K वोटों DIR
को वर्तमान बैश स्क्रिप्ट की निर्देशिका को असाइन करने के लिए इस एक-लाइनर की सुविधा है :
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
मैं नेस्टेड डबल-कोट्स से हैरान हूं। जहां तक मैं बता सकता हूं, निम्नलिखित अंश दोहरे-उद्धृत हैं:
"$( cd "
"${BASH_SOURCE[0]}"
" && pwd )"
... और =
(यानी $( dirname
और )
) के अधिकार के लिए सब कुछ अयोग्य है। दूसरे शब्दों में, मुझे लगता है कि 2, 4, और 6 वें "
वर्ण "
क्रमशः 1, 3, और 5 वें वर्णों को "बंद" करते हैं।
मुझे समझ में आया कि डबल-कोट्स "${BASH_SOURCE[0]}"
क्या हैं, लेकिन डबल-कोट्स के अन्य दो जोड़े का क्या उद्देश्य है?
यदि, दूसरी ओर (और उच्च वोट स्कोर के बावजूद), ऊपर वाला स्निपेट गलत है, तो इसके मामूली इरादे को हासिल करने का सही तरीका क्या है?
( नाममात्र के इरादे से मेरा मतलब है: निर्देशिका द्वारा लौटाए गए pwd
पहले cd
-ing के बाद लौटाए गए मान को इकट्ठा dirname "${BASH_SOURCE[0]}"
करना, और cd
एक-शेल में -ing करना , ताकि $PWD
माता-पिता के खोल अपरिवर्तित रहें)।
lsb_dist="$(. /etc/os-release && echo "$ID")"; echo "$lsb_dist"
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
साथ ही काम करता है।
$( here, it's a subshell, but you are writing code as if you were writing it on the "first level" of the shell .... )
:।