পরিবেশ পরিবর্তনশীল উপর ভিত্তি করে শর্তসাপেক্ষ অ্যাসাইনমেন্ট


11

বাশ স্ক্রিপ্টে, আমি একটি স্থানীয় ভেরিয়েবল বরাদ্দ করছি যাতে মানটি বহিরাগত, বৈশ্বিক পরিবেশ পরিবর্তনশীল ( $MYAPP_ENV) এর উপর নির্ভর করে ।

if [ "$MYAPP_ENV" == "PROD" ]
then
    SERVER_LOGIN=foobar123@prod.example.com
else
    SERVER_LOGIN=foobar987@test.example.com
fi

উপরোক্ত অ্যাসাইনমেন্টটি লেখার জন্য কোনও ছোট (এখনও পরিষ্কার) উপায় আছে? (সম্ভবতঃ কিছু শর্তসাপেক্ষ অপারেটর / ইনলাইন যদি ব্যবহার করা হয় তবে))

উত্তর:


17

এটি করতে আপনি কেস / স্যুইচ ইনও ব্যবহার bashকরতে পারেন:

case "$MYAPP_ENV" in
 PROD) SERVER_LOGIN="foobar123@prod.example.com" ;;
    *) SERVER_LOGIN="foobar987@test.example.com" ;;
esac

বা এই পদ্ধতি:

[ "$MYAPP_ENV" = PROD ] &&
   SERVER_LOGIN=foobar123@prod.example.com ||
   SERVER_LOGIN=foobar987@test.example.com

2
কেস স্টেটমেন্ট এটিকে সমস্ত এক লাইনে জ্যাম করার চেয়ে অনেক বেশি পঠনযোগ্য (যা দ্বিতীয় কমান্ড ব্যর্থ হতে পারলে বিপর্যয়ে শেষ হতে পারে, এক্ষেত্রে এটি ভাল, তবে সেই অভ্যাসে প্রবেশ করা ব্যয়বহুল হতে পারে)। এই জাতীয় ক্ষেত্রে মোকাবেলা করার সময় এটি সেরা পদ্ধতি।
ক্রিস ডাউন

@ জোনিক - দয়া করে আপনার উত্তরগুলি পূরণ করে যদি সেগুলির একটি উত্তর গ্রহণ করুন যাতে অন্যরা জানতে পারে যে আপনার সমস্যা সমাধান হয়েছে। ধন্যবাদ।
slm

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

1
@ জোনিক - এটি আমার সন্ধানও হয়েছে। বিশ্বাস করুন যে আমি বিকল্পগুলির সন্ধান করেছি, আমি দীর্ঘতর প্রোগ্রামগুলির চেয়ে অনেকগুলি প্রশস্ত রেখাগুলি পছন্দ করি এবং যদি / তবে / অন্যটিও আমার স্বাদের জন্য খুব ভার্জোজ থাকে।
slm

9

চেষ্টা করুন:

[ condition ] && var=value_when_true || var=value_when_false

যদি আপনার অ্যাসাইনমেন্টটি সংখ্যাসূচক হয় তবে আপনি bashটের্নারি অপারেশন ব্যবহার করতে পারেন :

(( assign_condition ? value_when_true : value_when_false ))

1
প্রাক্তনটি তিনটি নয়। true && false || echo "if this was ternary, this wouldn't be executed"
ক্রিস ডাউন

@ ক্রিস - সত্য, তবে এটি পরিভাষাটি সঠিক না হলেও এটি একটি ভাল ব্যবহারিক উত্তর।
ক্যাস

@ ক্রেইগস্যান্ডারস টার্মিনোলজির বিষয়টি বিবেচনা করে - দ্বিতীয় কমান্ড ব্যর্থ হতে পারলে আমি স্ক্রিপ্টগুলিতে প্রায়শই ব্যবহৃত এই পদ্ধতিটি দেখি।
ক্রিস ডাউন

@ ক্রিসডাউন: উত্তরের সম্পাদনা করুন, এখন কি এটি আরও ভাল?
cuonglm

1
কুওলম সম্পাদনার জন্য এটি 2.5 বছর সময় নিয়েছে!
ইরুবার

4

আপনি &&এবং ||অপারেটরগুলি ব্যবহার করতে পারেন

[ "$MYAPP_ENV" == "PROD" ] && SERVER_LOGIN=foobar123@prod.example.com || SERVER_LOGIN=foobar987@test.example.com
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.