ইতিমধ্যে উত্তর হিসাবে দেওয়া হয়েছে, একটি ভেরিয়েবল ব্যবহার করার জন্য আরও বহনযোগ্য উপায় হ'ল উদ্ধৃতি:
$ printf '%s\t%s\t%s\n' foo bar baz
foo bar baz
$ l="$(printf '%s\t%s\t%s\n' foo bar baz)"
$ <<<$l sed -n l
foo bar baz$
$ <<<"$l" sed -n l
foo\tbar\tbaz$
রেখার সাথে ব্যাশে প্রয়োগের পার্থক্য রয়েছে:
l="$(printf '%s\t%s\t%s\n' foo bar baz)"; <<<$l sed -n l
এটি বেশিরভাগ শেলের ফলাফল:
/bin/sh : foo bar baz$
/bin/b43sh : foo bar baz$
/bin/bash : foo bar baz$
/bin/b44sh : foo\tbar\tbaz$
/bin/y2sh : foo\tbar\tbaz$
/bin/ksh : foo\tbar\tbaz$
/bin/ksh93 : foo\tbar\tbaz$
/bin/lksh : foo\tbar\tbaz$
/bin/mksh : foo\tbar\tbaz$
/bin/mksh-static: foo\tbar\tbaz$
/usr/bin/ksh : foo\tbar\tbaz$
/bin/zsh : foo\tbar\tbaz$
/bin/zsh4 : foo\tbar\tbaz$
<<<
যখন অনাবৃত হয় তখন কেবল ডানদিকে ভ্যাশিয়ালটি বিভক্ত করুন ।
যাইহোক, এটি বাশ সংস্করণে সংশোধন করা হয়েছে ৪.৪
এর অর্থ হল এর ফলাফলটির $IFS
ফলাফলকে প্রভাবিত করে <<<
।
লাইন সহ:
l=(1 2 3); IFS=:; sed -n l <<<"${l[*]}"
সমস্ত শেল মানগুলিতে যোগদানের জন্য আইএফএসের প্রথম অক্ষর ব্যবহার করে।
/bin/y2sh : 1:2:3$
/bin/sh : 1:2:3$
/bin/b43sh : 1:2:3$
/bin/b44sh : 1:2:3$
/bin/bash : 1:2:3$
/bin/ksh : 1:2:3$
/bin/ksh93 : 1:2:3$
/bin/lksh : 1:2:3$
/bin/mksh : 1:2:3$
/bin/zsh : 1:2:3$
/bin/zsh4 : 1:2:3$
এর সাথে "${l[@]}"
, বিভিন্ন যুক্তি পৃথক করার জন্য একটি স্থান প্রয়োজন, তবে কিছু শাঁস আইএফএস থেকে মানটি ব্যবহার করতে পছন্দ করে (এটি কি সঠিক?)
/bin/y2sh : 1:2:3$
/bin/sh : 1 2 3$
/bin/b43sh : 1 2 3$
/bin/b44sh : 1 2 3$
/bin/bash : 1 2 3$
/bin/ksh : 1 2 3$
/bin/ksh93 : 1 2 3$
/bin/lksh : 1:2:3$
/bin/mksh : 1:2:3$
/bin/zsh : 1:2:3$
/bin/zsh4 : 1:2:3$
নাল আইএফএসের সাহায্যে মানগুলি এই লাইনের সাথে যুক্ত হওয়া উচিত:
a=(1 2 3); IFS=''; sed -n l <<<"${a[*]}"
/bin/y2sh : 123$
/bin/sh : 123$
/bin/b43sh : 123$
/bin/b44sh : 123$
/bin/bash : 123$
/bin/ksh : 123$
/bin/ksh93 : 123$
/bin/lksh : 1 2 3$
/bin/mksh : 1 2 3$
/bin/zsh : 123$
/bin/zsh4 : 123$
তবে লক্ষ এবং মীক উভয়ই এটি করতে ব্যর্থ।
আমরা যদি যুক্তিগুলির তালিকায় পরিবর্তন করি:
l=(1 2 3); IFS=''; sed -n l <<<"${l[@]}"
/bin/y2sh : 123$
/bin/sh : 1 2 3$
/bin/b43sh : 1 2 3$
/bin/b44sh : 1 2 3$
/bin/bash : 1 2 3$
/bin/ksh : 1 2 3$
/bin/ksh93 : 1 2 3$
/bin/lksh : 1 2 3$
/bin/mksh : 1 2 3$
/bin/zsh : 123$
/bin/zsh4 : 123$
যশ এবং জেডএস উভয়ই যুক্তি আলাদা রাখতে ব্যর্থ। এটা কি বাগ?
echo -e 'foo\tbar\tbaz\n...'
,echo $'foo\tbar\tbaz\n...'
, অথবাprintf 'foo\tbar\tbaz\n...\n'
বা এগুলোর বৈচিত্র। এটি প্রতিটি ট্যাব বা নিউলাইন স্বতন্ত্রভাবে মোড়ানো থেকে বাঁচায়।