বাশ মামলার বিবৃতি ক্যাসকেড করতে পারে?


29

আমি এরকম কিছু করার চেষ্টা করছি:

case $level in
    3)
        echo "Level Three"

    2)
        echo "Level Two"

    1)
        echo "Level one"
        ;;
esac

যেখানে যদি $ স্তর = 3 হয় তবে এটি আউটপুট হবে

Level Three
Level Two
Level One

যদিও যদি $ স্তর = 1 হয় তবে এটি কেবল আউটপুট হবে

Level One

তবে আমি যখন এটি চেষ্টা করি তখন আমি ত্রুটিটি syntax error near unexpected token ')'পাই কারণ আমি এটিকে অন্তর্ভুক্ত করি নি ;;

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


2
আপনার জানা প্রতিটি ভাষা যদি এটির অনুমতি দেয় তবে আপনাকে সি এবং এর অনুকরণকারী ছাড়া অন্য ভাষা শিখতে হবে। বিবৃতির ক্ষেত্রে পতনগুলি সি-তে একটি historicalতিহাসিক ডিজাইনের দুর্ঘটনা যা কোনওভাবে আরও মূল ভাষায় বেঁচে গিয়েছিল।
গিলস 'খারাপ হয়ে যাওয়া বন্ধ করুন'

উত্তর:


42

ফল-থ্রু আচরণের ;&পরিবর্তে আপনাকে ব্যবহার ;;করতে হবে:

#! /bin/bash
foo() {
    case "$1" in
        3)
            echo "Level Three"
            ;&
        2)
            echo "Level Two"
            ;&
        1)
            echo "Level One"
            ;;
        a)
            echo "Level a"
            ;&
        b)
            echo "Level b"
            ;&
        c)
            echo "Level c"
            ;;
    esac
}
echo 3:
foo 3
echo 2:
foo 2
echo a:
foo a
3:
Level Three
Level Two
Level one
2:
Level Two
Level one
a:
Level a
Level b
Level c

বাশ ডকুমেন্টেশনের শর্তসাপেক্ষ কনস্ট্রাক্টস বিভাগটি দেখুন ।

অন্যান্য বিশেষ চিহ্নিতকারীটি হ'ল ;;&:

পরের ধারাটিতে শেলটি নিদর্শনগুলি পরীক্ষা করে, যদি থাকে তবে এবং কোনও সফল ম্যাচে সম্পর্কিত কোনও কমান্ড-তালিকা কার্যকর করে।

;; সর্বদা চূড়ান্ত, আর কোনও নিদর্শন পরীক্ষা করা হয় না।

#! /bin/bash

foo() {
    case "$1" in
        *3*)
            echo "Level Three"
            ;;&
        *2*)
            echo "Level Two"
            ;;&
        *1*)
            echo "Level One"
            ;;&
    esac
}

echo 12:
foo 12
echo 13:
foo 13
echo 23:
foo 23
12:
Level Two
Level One
13:
Level Three
Level One
23:
Level Three
Level Two

18
বহনযোগ্যতা দ্রষ্টব্য: সিনট্যাক্সটি পসিক্স নয়। এটি আসে kshএবং এটি উপলভ্য ksh, bash(৪.৯, ২০০৯ থেকে) এবং zsh(৩.১.২, ১৯৯ since থেকে)। ;;&বাশ-নির্দিষ্ট
স্টাফেন চেজেলাস

4
এছাড়াও মনে রাখবেন zshসমতুল্য bash'র ;;&করা হয় ;|(4.3.3, 2007 সালে যোগ করা হয়েছে)।
স্টাফেন চেজেলাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.