$@
अलग-अलग शब्दों में $*
विस्तार होता है (जबकि एक शब्द में विस्तार होता है), जैसा कि bash
मैनुअल में बताया गया है । इस प्रकार, जब आप लिखते हैं
zenity --text="$@"
इसका विस्तार होता है
zenity --text="$1" "$2" "$3"
हालाँकि, शेल वैरिएबल असाइनमेंट शब्द विभाजन से नहीं गुजरते हैं। ध्यान दें कि फ़ील्ड / शब्द विभाजन bash
मैनुअल में चर असाइनमेंट के लिए विस्तार की सूची में छोड़ा गया है । यह व्यवहार POSIX युक्ति के अनुरूप है । इसलिए, जब आप लिखते हैं
text="$@"
text
यदि आपने लिखा था तो चर एक शब्द के रूप में सभी स्थितीय मापदंडों को प्राप्त करता है text="$*"
। दरअसल, यही कारण है कि दोहरे असाइनमेंट अक्सर चर असाइनमेंट में अनावश्यक होते हैं। दोनों
text=$@
तथा
text=$*
पूरी तरह से सुरक्षित हैं।
इसलिए,
text=$@
zenity --option="$text"
"$text"
एक शब्द का विस्तार करता है, यही कारण है कि यह काम करता है। ध्यान दें कि --option="$@"
कमांड के लिए सिर्फ एक सामान्य तर्क है zenity
, और शेल चर असाइनमेंट नहीं है, यही कारण है कि शब्द विभाजन यहां नहीं बल्कि अंदर होता है text=$@
।
zenity --text="$*"
-"$*"
एक शब्द के लिए फैलता है।