আমি অনেকগুলি বিভিন্ন সমাধান চেষ্টা করেছি, পটভূমির তথ্য এবং বিকল্প সহ একটি ভাল সংস্থান উদাহরণস্বরূপ গ্রেগের (ওরফে। গ্রেগ্যাটিক্স) উইকিতে বাশফ্যাউ / ০৯6 । একসাথে আমি নিম্নলিখিত দুটি সর্বাধিক পঠনযোগ্য (শ্রমজীবী থেকে) পেয়েছি:
4.4 বাশ ( যেহেতু আমি NEWS থেকে বলতে পারি ) প্যারামিটার সম্প্রসারণটি @Q
এভাবে ব্যবহার করা সম্ভব :
adb sh -c "other_tool -a -b ${*@Q}"
নোট করুন যে আমি $*
এখানে পরিবর্তে ব্যবহার করেছি $@
কারণ আপনি "other_tool -a -b ${*@Q}"
যুক্তি অনুসারে এক স্ট্রিংয়ের পরিবর্তে একটি একক স্ট্রিং হতে চান ।
আপনি যদি ব্যাশ অ্যারে ভেরিয়েবলের সাথে একই কাজ করতে চান তবে আপনার সিনট্যাক্সটি ${ARRAY[*]@Q}
(উদ্ধৃতিগুলির মধ্যে) প্রয়োজন হবে।
আপনার কাছে যদি 4.4 বাশ বা তার পরে পাওয়া না যায় বা নিশ্চিত না হন তবে এটি আমার পছন্দসই সমাধান:
function escapeBashArgs() {
local arg separator=""
for arg
do
printf "%s%q" "$separator" "$arg"
separator=" "
done
}
adb sh -c "other_tool -a -b $(escapeBashArgs "$@")"
নোট করুন যে এখানে বা "$@"
পরিবর্তে আপনার বা যুক্তিগুলির মধ্যে শব্দ বিভাজন চান না, সুতরাং উদ্ধৃতি ব্যতীত রূপগুলি ব্যবহার করা যাবে না, এবং আপনি চান যে যুক্তির সংখ্যা সংরক্ষণ করা উচিত, সুতরাং এটি যুক্ত হওয়ার সাথে ব্যবহার করা যাবে না একটি একক স্ট্রিং সমস্ত আর্গুমেন্ট। ফাংশন তারপরে সমস্ত আর্গুমেন্টকে একটি স্ট্রিংয়ে ফিরিয়ে দেয়।$@
"$*"
$*
"$*"
আপনি যদি প্রথম তর্কটির সামনে অতিরিক্ত স্থান সম্পর্কে চিন্তা না করেন তবে আপনি printf
বিন্যাসের স্ট্রিংটি পরিবর্তন করতে " %q"
এবং separator
পরিবর্তনশীলটি সরাতে পারেন । অথবা আপনি গর্ডন ডেভিসন উত্তর থেকে ওয়ান-লাইনার ব্যবহার করতে পারেন ।
এই সমাধানগুলি সমস্ত ক্ষেত্রেই কাজ করে যা আমি নিয়ে আসতে পারি, বিশেষত:
- কোন যুক্তি:
escapeBashArgs
→ কিছুই
- খালি যুক্তি:
escapeBashArgs "" ""
→'' ''
- কেবল ফাঁকা জায়গার সাথে যুক্তিগুলি:
escapeBashArgs " " " "
→ ' ' ' '
বা \ \ \ \ \
( শেষ স্থানটি এই সাইটগুলি রেন্ডারার খেয়েছে )
- বিশেষ ব্যবধান এবং নিউলাইনগুলির সাথে যুক্তি:
escapeBashArgs "a b" c\ d "arg with
newline"
→ 'a b' 'c d' $'arg with\nnewline'
বা a\ \ \ \ \ \ b c\ d $'arg with\nnewline'
( নতুন লাইনের মধ্যে রয়েছে with
এবং newline
অন্যান্য অবস্থানে এটি এই সাইটে লাইন মোড়ানোর কারণে )
- বিশেষ অক্ষরের সাথে যুক্তি:
escapeBashArgs '$"'\''({:})'
→ '$"'\''({:})'
বা\$\"\'\(\{:\}\)
- জ্যাকায়াজাকের উত্তর থেকে উদাহরণ :
escapeBashArgs x/\ \ \"b\"/aaaaa/\'xxx\ yyyy\'/zz\"offf\"
→ 'x/ "b"/aaaaa/'\''xxx yyyy'\''/zz"offf"'
বাx/\ \ \"b\"/aaaaa/\'xxx\ yyyy\'/zz\"offf\"
(জিএনইউ বাশ 5.0.3 (1) -রিলিজ দিয়ে পরীক্ষিত