में जेएसएच में वैरिएबल विस्तार अलग है, जो मैं स्पष्ट करना चाहता हूं उसके लिए निम्नलिखित एक सरल परीक्षण केस है।बाश
बैश में,
# define the function f
f() { ls $args; }
# Runs the command `ls`
f
# Runs the fommand `ls -a`
args="-a"
f
# Runs the command `ls -a -l`
args="-a -l"
f
लेकिन zsh में
# define the function f
f() { ls $args }
# Runs the command `ls`
f
# Runs the fommand `ls -a`
args="-a"
f
# I expect it to run `ls -a -l`, instead it gives me an error
args="-a -l"
f
ऊपर पर zsh में अंतिम पंक्ति, मुझे निम्न त्रुटि देता है
ls: invalid option -- ' '
Try `ls --help' for more information.
मुझे लगता है कि zsh निष्पादित हो रहा है
ls "-a -l"
जो मुझे एक ही त्रुटि मिलती है।
तो, मैं यहां बैश के व्यवहार को कैसे प्राप्त करूं?
मुझे यकीन नहीं है कि मैं स्पष्ट हूं, अगर मुझे कुछ पता होना है तो मुझे बताएं।
यह आपके सवाल का जवाब नहीं है, लेकिन मैं इस पर विचार बेहतर चाहते हैं: 'च() {ls" $ @ "; }; f -a -l' –
@glenn, हाँ, निश्चित रूप से है। जैसा कि मैंने कहा, यह सिर्फ एक बड़ी समस्या का एक उदाहरण है, जहां मुझे तर्क चर का उपयोग करना है। –
@ShrikantSharat यदि आप bash और zsh (और ksh) के लिए स्क्रिप्ट लिख रहे हैं, तो 'args' चर के साथ ऐसा न करें। इसके बजाय एक सरणी का प्रयोग करें। – Gilles