বাশে স্ট্রিং তুলনা। [[: পাওয়া যায় নি


165

আমি বাশে স্ট্রিংগুলি তুলনা করার চেষ্টা করছি। স্ট্যাকওভারফ্লোতে এটি কীভাবে করা যায় সে সম্পর্কে আমি ইতিমধ্যে একটি উত্তর পেয়েছি । স্ক্রিপ্টে আমি চেষ্টা করছি, আমি উল্লিখিত প্রশ্নের সাথে অ্যাডামের দ্বারা জমা দেওয়া কোডটি ব্যবহার করছি:

#!/bin/bash
string='My string';

if [[ "$string" == *My* ]]
then
  echo "It's there!";
fi

needle='y s'
if [[ "$string" == *"$needle"* ]]; then
  echo "haystack '$string' contains needle '$needle'"
fi

আমি উবুন্টুফর্মগুলি থেকেও চেষ্টা করেছি যা আপনি ২ য় পোস্টে পেতে পারেন

if [[ $var =~ regexp ]]; then
  #do something
fi

উভয় ক্ষেত্রেই আমি ত্রুটি পেয়েছি:

[[: not found

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


আমি এটি ভুল করতে পারি, তবে একক বর্গাকার বন্ধনী ব্যবহার করা সর্বদা আমার পক্ষে কাজ করে।
— মার্কাস আনটারওয়াদিজিটর

1
কী /bin/bash --versionছাপবে?
— থিমল

4
[এই ক্ষেত্রে কাজ করবে না, কারণ এটি নিদর্শনগুলিকে সমর্থন করে না।
— আনসগার ওয়াইচারস

উত্তর:


157

[[বাশ-বিল্টিন আপনার /bin/bashআসল বাশ বলে মনে হচ্ছে না।


যদি আমি টাইপ করি: টাইপ করুন '[[' আমি পাই [[একটি শেল কীওয়ার্ড
— ব্যবহারকারী 1581900

5
আপনি দৌড়ানোর সময় কি একই ফলাফল পাবেন /bin/bash -c "type [["?
— আনসগার ওয়াইচারস

42
আমার সাথে এটি ঘটেছিল কারণ আমি #!/bin/bashআমার ফাইলটির শীর্ষে যুক্ত করতে ভুলে গিয়েছিলাম
— মরফ্যাটিক

12
আমাকে হ'ল কারণ আমি স্ক্রিপ্টটি চালিয়েছি sh, হতাশার জন্য প্রচুর। এখন এই উত্তরটি সন্ধানের আগে আমি কেবল সমস্ত কিছু পূর্বাবস্থায় ফিরে যেতে হবে।
— লুই লাউডগ ট্রোটিয়ার

174

আপনি কিভাবে আপনার স্ক্রিপ্ট চালাচ্ছেন? আপনি যদি সঙ্গে

$ sh myscript

আপনার চেষ্টা করা উচিত্:

$ bash myscript

বা, যদি স্ক্রিপ্টটি কার্যকর হয়:

$ ./myscript

sh এবং বাশ দুটি আলাদা শাঁস । প্রথম ক্ষেত্রে আপনি আপনার স্ক্রিপ্টটি শ দোভাষীর পক্ষে যুক্তি হিসাবে পাঠাচ্ছেন, দ্বিতীয় ক্ষেত্রে আপনি প্রথম লাইনে সিদ্ধান্ত নেন কোন দোভাষী ব্যবহার করা হবে।


আমি অনুমতি এইভাবে অস্বীকার পেয়েছি। sudo ./myscript সহ এর কমান্ডটি পাওয়া যায় নি
— ব্যবহারকারী 1581900

11
না chmod + X myscript , তারপর আবার চালাতে, আপনি sudo প্রয়োজন হবে না
— Akos কে

2
আপনি কীভাবে স্ক্রিপ্ট চালাচ্ছেন?
— আকোস কে

যেমনটা তুমি বলেছিলে. সাধারণত আমি এটিকে 'mys sh myscipt.sh' দিয়ে কল করি। দ্বিতীয়বার chmod + x myscript.sh করার পরে আমি এটিকে ./myscript.sh দিয়ে বলেছি
— user1581900

5
আপনি যখন স্ক্রিপ্টটি চালাবেন তখন ত্রুটিটি আশা করা যায় sh myscript.sh, কারণ /bin/shবোর্নে শেল যেখানে [[এমনিতেই অন্তর্নির্মিত নয় তা অনুকরণ করে । তবে স্ক্রিপ্টটি চালানোর মাধ্যমে ./script.shকোনও ত্রুটি হওয়া উচিত নয়, কারণ সেই ক্ষেত্রে শেবাং /bin/bashব্যবহার করা উচিত ।
— আনসগার ওয়াইচারস

81

আপনার স্ক্রিপ্টের প্রথম লাইনটি:

#!/bin/bash

অথবা

#!/bin/sh

sh শেল এই ত্রুটি বার্তা উত্পাদন করে, বাশ নয়


1
প্রথম লাইনটি লেখকটির উল্লিখিত ত্রুটিটি তৈরি করার জন্যও আমার অনুপস্থিত ছিল!
— বেনামে

14

হেরোকু টুলবেল্ট ইনস্টল করার সময় আমার এই সমস্যা হয়েছিল

এইভাবেই আমি সমস্যার সমাধান করেছি

$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 ago 15  2012 /bin/sh -> dash

যেমন আপনি দেখতে পাচ্ছেন, / বিন / শ হ'ল "ড্যাশ" (বাশ নয়) এর একটি লিঙ্ক, এবং [[এটি ব্যাশ সিনট্যাকটিক সুগারেস। সুতরাং আমি কেবল / বিন / ব্যাশের লিঙ্কটি প্রতিস্থাপন করেছি। আপনার সিস্টেমে এর মতো আরএম ব্যবহার করে যত্নশীল!

$ sudo rm /bin/sh
$ sudo ln -s /bin/bash /bin/sh

6
shআপনার ডিস্ট্রোর জন্য ডিফল্টকে ওভাররাইড করা খারাপ পরামর্শ দেওয়া আইএমএইচও। একটি শেল যা দিয়ে চালিত হয় shতার সাথে কাজ করা উচিত dash; যদি তা না হয় তবে এটি স্ক্রিপ্টের একটি বাগ। আপনার যা দরকার তা যদি bashবৈশিষ্ট্য ব্যবহার bash, না sh।
— ট্রিপলি

4
এটি ভয়ানক
— টিবিএইচ

2
আমি সম্মতি জানাই, এটি ছিল কেবল কুৎসিত কাজ। একটি অনুরূপ তবে আরও ভাল কাজ যেমন update-alternatives( justinconover.wordpress.com/2012/05/14/… এর মতো (ডেবিয়ান-ভিত্তিক-লিনাক্সে) ব্যবহার করা তবে শেষ পর্যন্ত, এটি একই হবে।
— jperelli

13

@ অ্যাঙ্গার যেমনটি উল্লেখ করেছেন, [[এটি একটি বাশিজম, অর্থাত্ বাশের মধ্যে অন্তর্নির্মিত এবং অন্যান্য শেলের জন্য উপলভ্য নয়। আপনি যদি চান আপনার স্ক্রিপ্টটি পোর্টেবল হতে পারে তবে ব্যবহার করুন [। তুলনাগুলির জন্য আলাদা আলাদা সিনট্যাক্সেরও দরকার হবে: এতে পরিবর্তন ==করুন =।


উবুন্টু ১.0.০৪ এবং (sh ->) ড্যাশ 0.5.8-2.1ubuntu2 এর সাথে কিছুটা পরীক্ষা করে দেখেছি যে ["-ইক" এবং একসাথে মিলে মিলে কাজ করে। এ প্রসঙ্গে জন্য তুলনা অপারেটর একই তথ্য এখানে পাওয়া যেতে পারে: stackoverflow.com/questions/10849297/... - যেমন পরবর্তী লিঙ্কে মধ্যে বাঞ্ছনীয় কিন্তু যে আমার ন্যূনতম আক্রমণকারী পরিবর্তনের জন্য ফেল করলো আমি আরো (()) মূল্যায়ন অপারেটর সঙ্গে cheked / বা / এর কোড পরিবর্তনের আরও গভীর স্তরের প্রয়োজন হবে। সফ্টপনোরমা.অর্গ
— আলেকজান্ডার স্টোহর

3

স্ক্রিপ্টটি চলাকালীন sh এর পরিবর্তে বাশ উল্লেখ করুন। আমি ব্যক্তিগতভাবে লক্ষ্য করেছি যে ওবুন্টু 12.10 এর অধীনে এগুলি আলাদা different

bash script.sh arg0 ... argn


এটি আমার জন্য এটি স্থির!
— জাজিল্লাহ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.