आप हमेशा चर के प्रभाव को दिखा सकते हैं printf
।
शब्द विभाजन पर किया var1
:
$ var1="hello world"
$ printf '[%s]\n' $var1
[hello]
[world]
var1
उद्धृत, इसलिए कोई शब्द नहीं बंट रहा है:
$ printf '[%s]\n' "$var1"
[hello world]
इसके var1
अंदर शब्द विभाजन $()
, के बराबर echo "hello" "world"
:
$ var2=$(echo $var1)
$ printf '[%s]\n' "$var2"
[hello world]
कोई शब्द नहीं बंट रहा है var1
, न उद्धृत करने के साथ कोई समस्या $()
:
$ var2=$(echo "$var1")
$ printf '[%s]\n' "$var2"
[hello world]
var1
फिर से विभाजित शब्द :
$ var2="$(echo $var1)"
$ printf '[%s]\n' "$var2"
[hello world]
दोनों को उद्धृत करते हुए, सुनिश्चित करने का सबसे आसान तरीका।
$ var2="$(echo "$var1")"
$ printf '[%s]\n' "$var2"
[hello world]
ग्लोबिंग की समस्या
किसी चर को उद्धृत न करने से उसकी सामग्री का विस्तार हो सकता है:
$ mkdir test; cd test; touch file1 file2
$ var="*"
$ printf '[%s]\n' $var
[file1]
[file2]
$ printf '[%s]\n' "$var"
[*]
ध्यान दें कि यह केवल चर के विस्तार के बाद होता है। असाइनमेंट के दौरान ग्लोब को उद्धृत करना आवश्यक नहीं है:
$ var=*
$ printf '[%s]\n' $var
[file1]
[file2]
$ printf '[%s]\n' "$var"
[*]
set -f
इस व्यवहार को अक्षम करने के लिए उपयोग करें :
$ set -f
$ var=*
$ printf '[%s]\n' $var
[*]
और set +f
इसे फिर से सक्षम करने के लिए:
$ set +f
$ printf '[%s]\n' $var
[file1]
[file2]