पर दिए गए अंतिम कमांड लाइन तर्क का उपयोग करें, मैं $*
का अंतिम तत्व प्राप्त करना चाहता हूं। अब तक का सबसे अच्छा पाया गया है:zsh: स्क्रिप्ट
last=`eval "echo \\\$$#"`
लेकिन यह अत्यधिक अपारदर्शी लगता है।
पर दिए गए अंतिम कमांड लाइन तर्क का उपयोग करें, मैं $*
का अंतिम तत्व प्राप्त करना चाहता हूं। अब तक का सबसे अच्छा पाया गया है:zsh: स्क्रिप्ट
last=`eval "echo \\\$$#"`
लेकिन यह अत्यधिक अपारदर्शी लगता है।
zsh में, आप P
parameter expansion flag उपयोग कर सकते हैं या स्थितीय मापदंडों युक्त एक सरणी के रूप में @
का इलाज:
last=${(P)#}
last=${@[$#]}
कि zsh सहित सभी बॉर्न शैली के गोले में काम करता है एक तरह से
eval last=\$$#
है
(आप सही रास्ते पर थे, लेकिन echo
चलाने के लिए बस इसका आउटपुट प्राप्त करने के लिए चल रहा है।)
last=${@[-1]}
चाल करना चाहिए। आम तौर पर,
${@[n]}
, * n * वें पैरामीटर उपज जबकि
${@[-n]}
पिछले पैरामीटर के लिए वें * n * निकलेगा होगा।
पेट के पैरामीटर विस्तार POSIX में नहीं है, लेकिन यह कम से कम zsh, बैश, और ksh में काम करता है:
${@:$#}
कोई तर्क नहीं है, ${@:$#}
zsh और ksh में $0
के रूप में व्यवहार किया जाता है, लेकिन बैश में खाली के रूप में:
$ zsh -c 'echo ${@:$#}'
zsh
$ ksh -c 'echo ${@:$#}'
ksh
$ bash -c 'echo ${@:$#}'
$