ব্যাকটিকের পরিবর্তে $ () কাজ করছে না


17

আমার কিছু পুরানো স্ক্রিপ্ট রয়েছে যা আমি আপডেট করার চেষ্টা করি। কিছু কোড কনডেন্স করে:

 export X=`(echo "abc"; echo "def")`
 echo $X

যা প্রত্যাশিত আউটপুট দেয়:

 abc def

এখন ইন্টারনেট আমাকে জানায় যে ব্যাকটিকগুলি বাইরে $()রয়েছে যা আমার ব্যবহার করা উচিত তবে আমি যখন চেষ্টা করি:

export X=$((echo "abc"; echo "def"))

X সেট করা নেই এবং আমি ত্রুটি পেয়েছি:

bash: echo "abc"; echo "def": syntax error: invalid arithmetic operator (error token is ""abc"; echo "def"")

আমি কি ভুল করছি?

উত্তর:


27

$(( … ))সিনট্যাক্স একটি হল গাণিতিক এক্সপ্রেশন

গাণিতিক এক্সপ্রেশন সিনট্যাক্স এড়ানোর জন্য যা অনুপস্থিত তা হ'ল $(এবং নীচের মধ্যে একটি স্থান (

শেল কমান্ড ভাষার নির্দিষ্টকরণের কমান্ড প্রতিস্থাপনের বিভাগটি এর জন্য সতর্ক করে:

If the command substitution consists of a single subshell, such as:

   $( (command) )

a conforming application shall separate the "`$(`" and '`(`' into two tokens
(that is, separate them with white space). This is required to avoid any
ambiguities with arithmetic expansion.

21
এটি লক্ষ করা উচিত `...`এবং $(...)যাইহোক যাইহোক একটি সাব-শেল শুরু করুন, যাতে অভ্যন্তরগুলির (...)প্রয়োজন হয় না (একটি প্রক্রিয়া নষ্ট করুন)। $( (...); (...) )উদাহরণস্বরূপ (যেমন অভ্যন্তরীণ সাব-শেলগুলি প্রয়োজন হতে পারে) মতো জিনিসগুলিতে আপনার স্থান প্রয়োজন।
স্টাফেন চেজেলাস

15

চেষ্টা export X="$(echo "abc"; echo "def")"


ধন্যবাদ এটি কাজ করে, তবে অন্যান্য সমাধানের চেয়ে আরও বেশি সম্পাদনা দরকার।
হ্যারল্ড

2
বেশিরভাগ পসিক্স শেলগুলিতে ( kshএবং bashএকমাত্র ব্যতিক্রম হিসাবে) প্রয়োজনীয় কোটগুলি অন্তর্ভুক্ত করার জন্য +1 ।
স্টাফেন চেজেলাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.