আপনি সর্বদা এর সাথে ভেরিয়েবল উদ্ধৃতির প্রভাবগুলি প্রদর্শন করতে পারেন 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]