2011-09-20 12 views
6

पर दिए गए अंतिम कमांड लाइन तर्क का उपयोग करें, मैं $* का अंतिम तत्व प्राप्त करना चाहता हूं। अब तक का सबसे अच्छा पाया गया है:zsh: स्क्रिप्ट

last=`eval "echo \\\$$#"` 

लेकिन यह अत्यधिक अपारदर्शी लगता है।

उत्तर

8

zsh में, आप Pparameter expansion flag उपयोग कर सकते हैं या स्थितीय मापदंडों युक्त एक सरणी के रूप में @ का इलाज:

last=${(P)#} 
last=${@[$#]} 

कि zsh सहित सभी बॉर्न शैली के गोले में काम करता है एक तरह से

eval last=\$$# 
है

(आप सही रास्ते पर थे, लेकिन echo चलाने के लिए बस इसका आउटपुट प्राप्त करने के लिए चल रहा है।)

8
last=${@[-1]} 

चाल करना चाहिए। आम तौर पर,

${@[n]} 

, * n * वें पैरामीटर उपज जबकि

${@[-n]} 

पिछले पैरामीटर के लिए वें * n * निकलेगा होगा।

0

पेट के पैरामीटर विस्तार POSIX में नहीं है, लेकिन यह कम से कम zsh, बैश, और ksh में काम करता है:

${@:$#} 

कोई तर्क नहीं है, ${@:$#} zsh और ksh में $0 के रूप में व्यवहार किया जाता है, लेकिन बैश में खाली के रूप में:

$ zsh -c 'echo ${@:$#}' 
zsh 
$ ksh -c 'echo ${@:$#}' 
ksh 
$ bash -c 'echo ${@:$#}' 

$