বাশ স্ক্রিপ্টে আমি অন্যান্য কমান্ডে কীভাবে পরামিতিগুলি ফরোয়ার্ড করব?


165

আমার বাশ স্ক্রিপ্টের ভিতরে আমি শূন্য, এক বা দুটি পরামিতি (স্ক্রিপ্টটি তাদের চিনতে পারে) p আমি এটা কিভাবে করবো?

উত্তর:


239

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


23
প্রকৃতপক্ষে "$ @"
পিক্সেলবিট থেকে

1
@ পিক্সেলবিট: ধন্যবাদ, ভাল ক্যাচ আমি সম্পাদনা করেছি। @ Asukasz Lew: ম্যানুয়ালটিতে লিঙ্ক-টু পৃষ্ঠাটি দেখুন। :) মূলত, এটি আরও ভাল উদ্ধৃতি পরিচালনা করে।
বিনোদন

22
$@মূলত অ্যারের প্রতিটি উপাদানকে উদ্ধৃত স্ট্রিং হিসাবে গণ্য করে - এগুলি সম্প্রসারণের সুযোগ ছাড়াই পাশ করা হয়। এটিও নিশ্চিত করে যে প্রত্যেককে আলাদা শব্দ হিসাবে দেখা যায়। : একটি পরীক্ষা স্ক্রিপ্ট পার্থক্য প্রদর্শক সহ এই ব্যাখ্যাটি এখানে tldp.org/LDP/abs/html/internalvariables.html#APPREF
Cascabel

2
উদ্ধৃতি ব্যবহারে মনোযোগ দিন! আরও পড়ুন কেন এটা তাদের এখানে প্রায় গুরুত্বপূর্ণ: stackoverflow.com/a/4824637/4575793
Cadoiz

32

বাশ শিফট কমান্ডটি ব্যবহার করে :

উদাহরণস্বরূপ: শিফটেস্ট.শ:

#!/bin/bash
echo $1
shift
echo $1 $2

shifttest.sh 1 2 3 উত্পাদন করে

1
2 3

2
@ তমসজাহোলা কী বোঝাতে চাইছেন?
কাইল চদা

2
আপনি যদি আর্গুমেন্টগুলি সে হিসাবে $1উদ্ধৃত না করে ফরোয়ার্ড করেন "$1", তবে শেলটি শব্দ বিভাজন সম্পাদন করবে, উদাহরণস্বরূপ এবং পৃথকভাবে foo barফরওয়ার্ড করা হবে । foobar
তামাস জহোলা

: কাছাকাছি ডবল আছে "কেন এটা গুরুত্বপূর্ণ আরও পড়ুন stackoverflow.com/a/4824637/4575793
Cadoiz

1
আমার মস্তিষ্ক "শিফটেস্ট" -তে বেশ কয়েকটি চিঠি ঝাঁপিয়ে পড়েছিল এবং ফলস্বরূপ আমি এটিকে অন্য কিছু হিসাবে পড়ি।
অ্যালেক্স

21

বাশ সাবসেটিং প্যারামিটারগুলি সমর্থন করে ( সাবসেট এবং সাবস্ট্রিংগুলি দেখুন ), যাতে আপনি কোন প্যারামিটারগুলি প্রক্রিয়া করতে / পাস করতে চান তা চয়ন করতে পারেন।

  1. নতুন ফাইল খুলুন এবং এটি সম্পাদনা করুন: vim r.sh:

    echo "params only 2    : ${@:2:1}"
    echo "params 2 and 3   : ${@:2:2}"
    echo "params all from 2: ${@:2:99}"
    echo "params all from 2: ${@:2}"
    
  2. চালাও এটা:

    $ chmod u+x r.sh
    $ ./r.sh 1 2 3 4 5 6 7 8 9 10
    
  3. ফলাফল হলো:

    params only 2    : 2
    params 2 and 3   : 2 3
    params all from 2: 2 3 4 5 6 7 8 9 10
    params all from 2: 2 3 4 5 6 7 8 9 10
    
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.