Nt সিনট্যাক্স ত্রুটি: "(" অপ্রত্যাশিত) - অ্যারে তৈরি করার সময়


37

আমার দুটি (ডেবিয়ান) লিনাক্স সার্ভার রয়েছে। আমি একটি শেল স্ক্রিপ্ট তৈরি করছি।

প্রথমটিতে আমি এইভাবে একটি অ্যারে তৈরি করি:

#!/bin/bash
target_array=(
    "/home/user/direct/filename -p123 -r"
)

এটা ঠিক কাজ করে। তবে আমি যখন এটি অন্য সার্ভারে চালিত করি তখন:

Syntax error: "(" unexpected

যতদূর আমি উভয় সার্ভার একই বলতে পারি। এটি কেন কাজ করে না সে সম্পর্কে কেউ কেউ আলোকপাত করতে পারেন?

আমি যদি সরাসরি এটি টার্মিনালে টাইপ করি তবে ঠিক আছে ??


এটি প্রদর্শিত হবে যখন আমি এটি হিসাবে চালানো

sh scriptname.sh

আমি ত্রুটি পেয়েছি, তবে আমি যদি এটি চালাও

./scriptname.sh

এটা ঠিক আছে বলে মনে হচ্ছে। পার্থক্য কি?


আপনি কি দুটি সার্ভারের মধ্যে স্ক্রিপ্টটি অনুলিপি করেছেন? cat -v <script>উত্সাহী চর আছে কিনা তা দেখার চেষ্টা করুন ।
— লিলোক্স

2
shএটি ঠিক নয় bashএবং এটি sh scriptname.shএটি ভুল হিসাবে চালানো হচ্ছে
— এরিক রেনোফ

উত্তর:


56

আপনি যখন ./scriptname.shএটি ব্যবহার /bin/bashকরেন তখন প্রথম লাইনের সাথে এটি কার্যকর করে #!। আপনি যখন sh scriptname.shএটি ব্যবহার করেন তখন কার্যকর হয় shনা bash।

shশেল অ্যারে তৈরি করতে কোন সিনট্যাক্স আছে, কিন্তু ব্যাশ সিনট্যাক্স আপনাকে ব্যবহৃত হয়েছে।


ঠিক আছে, এখন তা বোধগম্য হয়। আপনি সম্ভবত বলতে পারেন যে আমি লিনাক্সে বেশ নতুন (বর্তমানে আমার পাওয়ারশেল স্ক্রিপ্টস শেল / ব্যাশ স্ক্রিপ্টগুলি রূপান্তর করার চেষ্টা করছি)। আমি ./এখন থেকে ব্যবহারে দৃ stick় থাকব । চিয়ার্স
— আইজিজিটি

এটি অগত্যা নয়, তবে #!/bin/shএবং sh script.sh(বা #!/bin/bashএবং bash script.sh) এর মধ্যে অবশ্যই সমন্বয় থাকতে হবে
— কনস্ট্যান্টিন মোরেঙ্কো

3
শি ভাষার কোনও অ্যারে ( a[index]=xবা a=(x y)) নেই। কিছু সংখ্যক শব্দের সংজ্ঞাদাতা অ্যারে সমর্থন করে, কেবল ksh88 (লিনাক্স এএএফআইকে পোর্ট করা হয়নি) এবং কিছু পুরানো পিডিক্স রূপগুলি সমর্থন করবে a[index]=valueএবং না a=(x y)। ডেবিয়ান- shএ সাধারণত dashএটির কোনও সমর্থন নেই ( a[index]=xকাজ করবে না)।
— স্টাফেন চেজেলাস

1
আমি এখন থেকে টুকরোয় মারা যেতে পারি! :)
— পাওলো

0

চলমান ./scriptname.shফাইলের প্রথম লাইন পড়া স্থাপিত কর এবং দেখ এটা / বিন / bash' চালানোর জন্য 'এবং অনুবাদক স্ক্রিপ্ট বাকি পাস প্রয়োজন, হবে নির্বাহ করার সময় sh scriptname.shব্যবহারকারীর মান শেল ফাইল পাস হবে (যেমন অ্যাশ) এবং অন্যান্য দোভাষী যেভাবে অ্যারেগুলিকে বাশকে সমর্থন করে না সে ক্ষেত্রে হোন।


1
shঅগত্যা "ব্যবহারকারীর স্ট্যান্ডার্ড শেল" এটি প্রায়শই নিজস্ব নির্বাহযোগ্য (বা সিএমলিংক) হয় না এবং shস্ক্রিপ্টটি প্রক্রিয়া করার জন্য অনুরোধ করা হবে। এমনকি যদি সেই ব্যবহারকারীর জন্য ডিফল্ট লগইন শেল হয়bash
— এরিক রেনোফ

এই অংশটি আমি এই মুহুর্তে পুরোপুরি নিশ্চিত ছিল না। স্পষ্টতার জন্য ধন্যবাদ!
— ডেভ_এলকারিন

0

সাথে sh scriptname.sh, আপনি এটি দিয়ে চালাচ্ছেন sh, অগত্যা নয় bash। sh --versionদুটি মেশিনের সাথে তুলনা করার চেষ্টা করুন । এবং / বা সাথে dpkg -S $(which sh)।


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