বাশে ফ্ল্যাগ দিয়ে কীভাবে যুক্তি পাবেন


283

আমি জানি যে আমি সহজেই এর মতো প্যাশাগুলি বাশগুলিতে পেতে পারি:

$0 অথবা $1

প্রতিটি প্যারামিটার কী ব্যবহৃত হয় তা নির্দিষ্ট করতে আমি এই জাতীয় পতাকা বিকল্পগুলি ব্যবহার করতে সক্ষম হতে চাই:

mysql -u user -h host

অবস্থানের পরিবর্তে পতাকা দ্বারা -u paramমূল্য এবং -h paramমান পাওয়ার সর্বোত্তম উপায় কী ?


2
এটা একটা ভাল ধারণা জিজ্ঞাসা করতে / এ ওভার পরীক্ষা হতে পারে unix.stackexchange.com পাশাপাশি
MRR0GERS

8
গুগল "ব্যাশ getopts" - প্রচুর টিউটোরিয়াল।
গ্লেন জ্যাকম্যান

89
@ গ্লেন-জ্যাকম্যান: আমি নামটি জানি যে আমি এখন অবশ্যই এটি গুগল করব। গুগল সম্পর্কিত জিনিসটি - একটি প্রশ্ন জিজ্ঞাসা করার জন্য - আপনার উত্তরের 50% ইতিমধ্যে জানা উচিত।
স্ট্যান

উত্তর:


292

এটি সাধারণত আমি ব্যবহার করি:

while test $# -gt 0; do
  case "$1" in
    -h|--help)
      echo "$package - attempt to capture frames"
      echo " "
      echo "$package [options] application [arguments]"
      echo " "
      echo "options:"
      echo "-h, --help                show brief help"
      echo "-a, --action=ACTION       specify an action to use"
      echo "-o, --output-dir=DIR      specify a directory to store output in"
      exit 0
      ;;
    -a)
      shift
      if test $# -gt 0; then
        export PROCESS=$1
      else
        echo "no process specified"
        exit 1
      fi
      shift
      ;;
    --action*)
      export PROCESS=`echo $1 | sed -e 's/^[^=]*=//g'`
      shift
      ;;
    -o)
      shift
      if test $# -gt 0; then
        export OUTPUT=$1
      else
        echo "no output dir specified"
        exit 1
      fi
      shift
      ;;
    --output-dir*)
      export OUTPUT=`echo $1 | sed -e 's/^[^=]*=//g'`
      shift
      ;;
    *)
      break
      ;;
  esac
done

মূল বিষয়গুলি হ'ল:

  • $# আর্গুমেন্ট সংখ্যা
  • যখন লুপ সরবরাহকৃত সমস্ত আর্গুমেন্টের দিকে নজর রাখে, কেস স্টেটমেন্টের ভিতরে তাদের মানগুলির সাথে মেলে
  • শিফটটি প্রথমটিকে দূরে নিয়ে যায়। একাধিক মান নিতে আপনি কেস স্টেটমেন্টের ভিতরে একাধিকবার স্থানান্তর করতে পারেন।

3
--action*এবং --output-dir*কেসগুলি কী করে ?
লুসিও

1
তারা কেবল পরিবেশে যে মানগুলি পায় সেগুলি সংরক্ষণ করে।
ফ্লেক্সো

22
@ লুসিও সুপার পুরাতন মন্তব্য করেছেন, তবে অন্য কেউ এই পৃষ্ঠাটি দেখার সুযোগ পেলে এটি যুক্ত করুন। * (ওয়াইল্ডকার্ড) এমন কেসটির জন্য যেখানে কেউ টাইপ করে --action=[ACTION]সেইরকম কেস যেখানে কেউ টাইপ করে--action [ACTION]
কুপার

2
কেন *)আপনি সেখানে ভাঙেন, আপনার কি খারাপ বিকল্পটি প্রস্থান করা বা উপেক্ষা করা উচিত নয়? অন্য কথায় অংশ কখনোই প্রক্রিয়াভুক্ত করা। -bad -o dir-o dir
newguy

@ নতুন প্রশ্ন ভাল প্রশ্ন। আমি মনে করি আমি তাদের অন্য কিছুতে
ফ্লেক্সো

427

এই উদাহরণটি বাশের অন্তর্নির্মিত getoptsকমান্ডটি ব্যবহার করে এবং এটি Google শেল স্টাইল গাইড থেকে এসেছে :

a_flag=''
b_flag=''
files=''
verbose='false'

print_usage() {
  printf "Usage: ..."
}

while getopts 'abf:v' flag; do
  case "${flag}" in
    a) a_flag='true' ;;
    b) b_flag='true' ;;
    f) files="${OPTARG}" ;;
    v) verbose='true' ;;
    *) print_usage
       exit 1 ;;
  esac
done

দ্রষ্টব্য: যদি কোনও অক্ষর অনুসরণ করা হয় কোলন (যেমন f:), সেই বিকল্পটির একটি আর্গুমেন্ট থাকবে বলে আশা করা যায়।

ব্যবহারের উদাহরণ: ./script -v -a -b -f filename

গিওপ্টস ব্যবহারের স্বীকৃত উত্তরের বিভিন্ন সুবিধা রয়েছে:

  • সময় শর্তটি অনেক বেশি পঠনযোগ্য এবং গ্রহণযোগ্য বিকল্পগুলি কী তা দেখায়
  • ক্লিনার কোড; পরামিতি সংখ্যা এবং স্থানান্তর সংখ্যা গণনা
  • আপনি বিকল্পগুলিতে যোগ দিতে পারেন (যেমন -a -b -c-abc)

তবে, একটি বড় অসুবিধা হ'ল এটি দীর্ঘ বিকল্পগুলি সমর্থন করে না, কেবলমাত্র একক-অক্ষর বিকল্পগুলি।


48
একটি উত্তর কীভাবে এই উত্তর, ব্যাশ বিল্টিন ব্যবহার করে, শীর্ষস্থানীয় নয়
উইল বার্নওয়েল

13
উত্তরোত্তর জন্য: 'abf: v' এর পরে কোলন বোঝায় যে -f একটি অতিরিক্ত যুক্তি নেয় (এই ক্ষেত্রে ফাইলের নাম)।
জাহাজবাজ

1
আমাকে ?) printf '\nUsage: %s: [-a] aflag [-b] bflag\n' $0; exit 2 ;;
অ্যান্ডি

7
আপনি কলোন সম্পর্কে একটি নোট যোগ করতে পারেন? প্রতিটি অক্ষরের পরে, কোনও কোলন মানে কোনও আরগ নয়, একটি কোলন মানে একটি আরগ, এবং দুটি কলোন মানে alচ্ছিক আরগ?
limasxgoesto0

3
@ উইলবার্নওয়েলের একটি লক্ষ্য করা উচিত যে প্রশ্নটি জিজ্ঞাসা করার 3 বছর পরে এটি যুক্ত করা হয়েছিল, যেখানে শীর্ষ উত্তর একই দিনে যুক্ত করা হয়েছিল।
rbennell

47

getopt আপনার বন্ধু .. একটি সহজ উদাহরণ:

function f () {
TEMP=`getopt --long -o "u:h:" "$@"`
eval set -- "$TEMP"
while true ; do
    case "$1" in
        -u )
            user=$2
            shift 2
        ;;
        -h )
            host=$2
            shift 2
        ;;
        *)
            break
        ;;
    esac 
done;

echo "user = $user, host = $host"
}

f -u myself -h some_host

আপনার / usr / বিন ডিরেক্টরিতে বিভিন্ন উদাহরণ থাকতে হবে।


3
ডিরেক্টরিটিতে আরও বিস্তৃত উদাহরণ পাওয়া যাবে /usr/share/doc/util-linux/examples, খুব কমপক্ষে উবুন্টু মেশিনে।
সার্জ Stroobandt

10

আমি মনে করি এটি আপনি যা অর্জন করতে চান তার একটি সহজ উদাহরণ হিসাবে কাজ করবে। বাহ্যিক সরঞ্জামগুলি ব্যবহার করার দরকার নেই। সরঞ্জামগুলি অন্তর্নির্মিত আপনার জন্য কাজ করতে পারে।

function DOSOMETHING {

   while test $# -gt 0; do
           case "$1" in
                -first)
                    shift
                    first_argument=$1
                    shift
                    ;;
                -last)
                    shift
                    last_argument=$1
                    shift
                    ;;
                *)
                   echo "$1 is not a recognized flag!"
                   return 1;
                   ;;
          esac
  done  

  echo "First argument : $first_argument";
  echo "Last argument : $last_argument";
 }

এটি আপনাকে পতাকা ব্যবহারের অনুমতি দেবে তাই আপনি যে অর্ডারটি প্যারামিটারগুলি দিয়ে যাচ্ছেন তা বিবেচনা না করেই আপনি যথাযথ আচরণ পাবেন।

উদাহরণ:

 DOSOMETHING -last "Adios" -first "Hola"

আউটপুট:

 First argument : Hola
 Last argument : Adios

আপনি এই ফাংশনটি আপনার প্রোফাইলে যুক্ত করতে পারেন বা এটি কোনও স্ক্রিপ্টের ভিতরে রাখতে পারেন।

ধন্যবাদ!

সম্পাদনা করুন: এএএ ফাইল হিসাবে এটি সংরক্ষণ করুন এবং তারপরে এটি কার্যকর করুন yourfile.sh -last "Adios" -first "Hola"

#!/bin/bash
while test $# -gt 0; do
           case "$1" in
                -first)
                    shift
                    first_argument=$1
                    shift
                    ;;
                -last)
                    shift
                    last_argument=$1
                    shift
                    ;;
                *)
                   echo "$1 is not a recognized flag!"
                   return 1;
                   ;;
          esac
  done  

  echo "First argument : $first_argument";
  echo "Last argument : $last_argument";

আমি উপরের কোড ব্যবহার করি এবং যখন এটি চালায় তখন কোনও কিছুই মুদ্রণ করা হয় না। ./hello.sh DOSOMETHING -last "Adios" -first "Hola"
dinu0101

@ dinu0101 এটি একটি ফাংশন। স্ক্রিপ্ট নয়। আপনার এটি ডসোমথিং -স্টাল্ট "অ্যাডিয়োস" -প্রথম "হোলা" হিসাবে ব্যবহার করা উচিত
মাতিয়াস ব্যারিওস

ধন্যবাদ @ মাটিয়াস বুঝতে পারছিল না। স্ক্রিপ্টের ভিতরে কীভাবে চালানো যায়।
dinu0101

1
আপনাকে অনেক ধন্যবাদ
@

2
ম্যাকোস- return 1;এ শেষ উদাহরণটি ব্যবহার can only 'return' from a function or sourced scriptকরে। exit 1;প্রত্যাশিত হিসাবে কাজ করে স্যুইচিং ।
ম্যাটিয়াস

5

অন্য বিকল্পটি হ'ল নীচের উদাহরণের মতো কিছু ব্যবহার করা যা আপনাকে দীর্ঘ - আইমেজ বা শর্ট- আই ট্যাগ ব্যবহার করার অনুমতি দেয় এবং সংকলিত -i = "উদাহরণ.jpg" বা পৃথক -i উদাহরণ.jpg আর্গুমেন্টগুলিতে পাস করার পদ্ধতিগুলি অনুমোদন করে ।

# declaring a couple of associative arrays
declare -A arguments=();  
declare -A variables=();

# declaring an index integer
declare -i index=1;

# any variables you want to use here
# on the left left side is argument label or key (entered at the command line along with it's value) 
# on the right side is the variable name the value of these arguments should be mapped to.
# (the examples above show how these are being passed into this script)
variables["-gu"]="git_user";  
variables["--git-user"]="git_user";  
variables["-gb"]="git_branch";  
variables["--git-branch"]="git_branch";  
variables["-dbr"]="db_fqdn";  
variables["--db-redirect"]="db_fqdn";  
variables["-e"]="environment";  
variables["--environment"]="environment";

# $@ here represents all arguments passed in
for i in "$@"  
do  
  arguments[$index]=$i;
  prev_index="$(expr $index - 1)";

  # this if block does something akin to "where $i contains ="
  # "%=*" here strips out everything from the = to the end of the argument leaving only the label
  if [[ $i == *"="* ]]
    then argument_label=${i%=*} 
    else argument_label=${arguments[$prev_index]}
  fi

  # this if block only evaluates to true if the argument label exists in the variables array
  if [[ -n ${variables[$argument_label]} ]]
    then
        # dynamically creating variables names using declare
        # "#$argument_label=" here strips out the label leaving only the value
        if [[ $i == *"="* ]]
            then declare ${variables[$argument_label]}=${i#$argument_label=} 
            else declare ${variables[$argument_label]}=${arguments[$index]}
        fi
  fi

  index=index+1;
done;

# then you could simply use the variables like so:
echo "$git_user";

3

আমি রবার্ট ম্যাকমাহনের উত্তরটি এখানে সবচেয়ে ভাল পছন্দ করি কারণ আপনার যে কোনও স্ক্রিপ্ট ব্যবহারের জন্য ফাইলগুলি অন্তর্ভুক্ত করে তোলে sha তবে if [[ -n ${variables[$argument_label]} ]]"ভেরিয়েবল: খারাপ অ্যারে সাবস্ক্রিপ্ট" বার্তাটি নিক্ষেপ করার সাথে এটির একটি ত্রুটি রয়েছে বলে মনে হচ্ছে । আমি মন্তব্যে প্রতিনিধির নেই, এবং আমার সন্দেহ এই সঠিক হল 'ফিক্স' কিন্তু যে মোড়কে ifমধ্যেif [[ -n $argument_label ]] ; then সাফ করে এটি আপ।

আমি এখানে কোডটি দিয়ে শেষ করেছি, আপনি যদি আরও ভাল উপায় জানেন তবে দয়া করে রবার্টের উত্তরে একটি মন্তব্য যুক্ত করুন।

ফাইল "flags-declares.sh" অন্তর্ভুক্ত করুন

# declaring a couple of associative arrays
declare -A arguments=();
declare -A variables=();

# declaring an index integer
declare -i index=1;

ফাইল "ফ্ল্যাগস-আরগমেন্টস.এস" অন্তর্ভুক্ত করুন

# $@ here represents all arguments passed in
for i in "$@"
do
  arguments[$index]=$i;
  prev_index="$(expr $index - 1)";

  # this if block does something akin to "where $i contains ="
  # "%=*" here strips out everything from the = to the end of the argument leaving only the label
  if [[ $i == *"="* ]]
    then argument_label=${i%=*}
    else argument_label=${arguments[$prev_index]}
  fi

  if [[ -n $argument_label ]] ; then
    # this if block only evaluates to true if the argument label exists in the variables array
    if [[ -n ${variables[$argument_label]} ]] ; then
      # dynamically creating variables names using declare
      # "#$argument_label=" here strips out the label leaving only the value
      if [[ $i == *"="* ]]
        then declare ${variables[$argument_label]}=${i#$argument_label=} 
        else declare ${variables[$argument_label]}=${arguments[$index]}
      fi
    fi
  fi

  index=index+1;
done;

আপনার "স্ক্রিপ্ট.শ"

. bin/includes/flags-declares.sh

# any variables you want to use here
# on the left left side is argument label or key (entered at the command line along with it's value) 
# on the right side is the variable name the value of these arguments should be mapped to.
# (the examples above show how these are being passed into this script)
variables["-gu"]="git_user";
variables["--git-user"]="git_user";
variables["-gb"]="git_branch";
variables["--git-branch"]="git_branch";
variables["-dbr"]="db_fqdn";
variables["--db-redirect"]="db_fqdn";
variables["-e"]="environment";
variables["--environment"]="environment";

. bin/includes/flags-arguments.sh

# then you could simply use the variables like so:
echo "$git_user";
echo "$git_branch";
echo "$db_fqdn";
echo "$environment";

3

যদি আপনি পাইথন আরগপার্সের সাথে পরিচিত হন, এবং বাথ আর্গুমেন্টগুলি পার্স করার জন্য পাইথনকে কল করতে আপত্তি করেন না তবে এখানে একটি অংশের কোড পাওয়া যায় যা আমি আরগপার্স-ব্যাশ নামে পরিচিত খুব কার্যকর এবং কার্যকর বলে মনে করি found https://github.com/nhoffman/ argparse-ব্যাশ

উদাহরণ তাদের উদাহরণ থেকে নেওয়া। স্ক্রিপ্ট:

#!/bin/bash

source $(dirname $0)/argparse.bash || exit 1
argparse "$@" <<EOF || exit 1
parser.add_argument('infile')
parser.add_argument('outfile')
parser.add_argument('-a', '--the-answer', default=42, type=int,
                    help='Pick a number [default %(default)s]')
parser.add_argument('-d', '--do-the-thing', action='store_true',
                    default=False, help='store a boolean [default %(default)s]')
parser.add_argument('-m', '--multiple', nargs='+',
                    help='multiple values allowed')
EOF

echo required infile: "$INFILE"
echo required outfile: "$OUTFILE"
echo the answer: "$THE_ANSWER"
echo -n do the thing?
if [[ $DO_THE_THING ]]; then
    echo " yes, do it"
else
    echo " no, do not do it"
fi
echo -n "arg with multiple values: "
for a in "${MULTIPLE[@]}"; do
    echo -n "[$a] "
done
echo

2

আমি একটি সাধারণ টিএলডিআর প্রস্তাব করি :; উদাহরণস্বরূপ

হেলিওরল্ড.শ নামে একটি বাশ স্ক্রিপ্ট তৈরি করুন

#!/bin/bash

while getopts "n:" arg; do
  case $arg in
    n) Name=$OPTARG;;
  esac
done

echo "Hello $Name!"

-nস্ক্রিপ্টটি কার্যকর করার সময় আপনি একটি anচ্ছিক প্যারামিটারটি পাস করতে পারেন ।

স্ক্রিপ্টটি যেমন চালান:

$ bash helloworld.sh -n 'World'

আউটপুট

$ Hello World!

মন্তব্য

আপনি যদি একাধিক পরামিতি ব্যবহার করতে চান:

  1. while getops "n:" arg: doযেমন আরও পরামিতি সঙ্গে প্রসারিত করুনwhile getops "n:o:p:" arg: do
  2. অতিরিক্ত পরিবর্তনশীল অ্যাসাইনমেন্ট সহ কেস স্যুইচ প্রসারিত করুন। যেমন o) Option=$OPTARGএবংp) Parameter=$OPTARG

1
#!/bin/bash

if getopts "n:" arg; then
  echo "Welcome $OPTARG"
fi

এটিকে নমুনা.শ হিসাবে সংরক্ষণ করুন এবং চালনার চেষ্টা করুন

sh sample.sh -n John

আপনার টার্মিনালে


1

একাধিক পতাকা সহ আমাকে গিওপ্টস ব্যবহার করতে সমস্যা হয়েছিল, তাই আমি এই কোডটি লিখেছিলাম। এটি পতাকাগুলি সনাক্ত করতে এবং ভেরিয়েবলগুলিতে যুক্তিগুলি নির্ধারণ করতে এই পতাকাগুলি ব্যবহার করতে একটি মডেল ভেরিয়েবল ব্যবহার করে।

মনে রাখবেন, একটি পত্রে যদি কোনও যুক্তি না থাকে তবে CURRENTFLAG সেট করা ছাড়াও অন্য কিছু করা যেতে পারে।

    for MYFIELD in "$@"; do

        CHECKFIRST=`echo $MYFIELD | cut -c1`

        if [ "$CHECKFIRST" == "-" ]; then
            mode="flag"
        else
            mode="arg"
        fi

        if [ "$mode" == "flag" ]; then
            case $MYFIELD in
                -a)
                    CURRENTFLAG="VARIABLE_A"
                    ;;
                -b)
                    CURRENTFLAG="VARIABLE_B"
                    ;;
                -c)
                    CURRENTFLAG="VARIABLE_C"
                    ;;
            esac
        elif [ "$mode" == "arg" ]; then
            case $CURRENTFLAG in
                VARIABLE_A)
                    VARIABLE_A="$MYFIELD"
                    ;;
                VARIABLE_B)
                    VARIABLE_B="$MYFIELD"
                    ;;
                VARIABLE_C)
                    VARIABLE_C="$MYFIELD"
                    ;;
            esac
        fi
    done

0

সুতরাং এখানে এটি আমার সমাধান। আমি হাইফেন ছাড়াই, এবং একটি হাইফেন এবং দুটি হাইফেনের পাশাপাশি পরামিতি / মান অ্যাসাইনমেন্ট সহ একটি এবং দুটি হাইফেন সহ বুলিয়ান পতাকাগুলি পরিচালনা করতে সক্ষম হতে চেয়েছিলাম।

# Handle multiple types of arguments and prints some variables
#
# Boolean flags
# 1) No hyphen
#    create   Assigns `true` to the variable `CREATE`.
#             Default is `CREATE_DEFAULT`.
#    delete   Assigns true to the variable `DELETE`.
#             Default is `DELETE_DEFAULT`.
# 2) One hyphen
#      a      Assigns `true` to a. Default is `false`.
#      b      Assigns `true` to b. Default is `false`.
# 3) Two hyphens
#    cats     Assigns `true` to `cats`. By default is not set.
#    dogs     Assigns `true` to `cats`. By default is not set.
#
# Parameter - Value
# 1) One hyphen
#      c      Assign any value you want
#      d      Assign any value you want
#
# 2) Two hyphens
#   ... Anything really, whatever two-hyphen argument is given that is not
#       defined as flag, will be defined with the next argument after it.
#
# Example:
# ./parser_example.sh delete -a -c VA_1 --cats --dir /path/to/dir
parser() {
    # Define arguments with one hyphen that are boolean flags
    HYPHEN_FLAGS="a b"
    # Define arguments with two hyphens that are boolean flags
    DHYPHEN_FLAGS="cats dogs"

    # Iterate over all the arguments
    while [ $# -gt 0 ]; do
        # Handle the arguments with no hyphen
        if [[ $1 != "-"* ]]; then
            echo "Argument with no hyphen!"
            echo $1
            # Assign true to argument $1
            declare $1=true
            # Shift arguments by one to the left
            shift
        # Handle the arguments with one hyphen
        elif [[ $1 == "-"[A-Za-z0-9]* ]]; then
            # Handle the flags
            if [[ $HYPHEN_FLAGS == *"${1/-/}"* ]]; then
                echo "Argument with one hyphen flag!"
                echo $1
                # Remove the hyphen from $1
                local param="${1/-/}"
                # Assign true to $param
                declare $param=true
                # Shift by one
                shift
            # Handle the parameter-value cases
            else
                echo "Argument with one hyphen value!"
                echo $1 $2
                # Remove the hyphen from $1
                local param="${1/-/}"
                # Assign argument $2 to $param
                declare $param="$2"
                # Shift by two
                shift 2
            fi
        # Handle the arguments with two hyphens
        elif [[ $1 == "--"[A-Za-z0-9]* ]]; then
            # NOTE: For double hyphen I am using `declare -g $param`.
            #   This is the case because I am assuming that's going to be
            #   the final name of the variable
            echo "Argument with two hypens!"
            # Handle the flags
            if [[ $DHYPHEN_FLAGS == *"${1/--/}"* ]]; then
                echo $1 true
                # Remove the hyphens from $1
                local param="${1/--/}"
                # Assign argument $2 to $param
                declare -g $param=true
                # Shift by two
                shift
            # Handle the parameter-value cases
            else
                echo $1 $2
                # Remove the hyphens from $1
                local param="${1/--/}"
                # Assign argument $2 to $param
                declare -g $param="$2"
                # Shift by two
                shift 2
            fi
        fi

    done
    # Default value for arguments with no hypheb
    CREATE=${create:-'CREATE_DEFAULT'}
    DELETE=${delete:-'DELETE_DEFAULT'}
    # Default value for arguments with one hypen flag
    VAR1=${a:-false}
    VAR2=${b:-false}
    # Default value for arguments with value
    # NOTE1: This is just for illustration in one line. We can well create
    #   another function to handle this. Here I am handling the cases where
    #   we have a full named argument and a contraction of it.
    #   For example `--arg1` can be also set with `-c`.
    # NOTE2: What we are doing here is to check if $arg is defined. If not,
    #   check if $c was defined. If not, assign the default value "VD_"
    VAR3=$(if [[ $arg1 ]]; then echo $arg1; else echo ${c:-"VD_1"}; fi)
    VAR4=$(if [[ $arg2 ]]; then echo $arg2; else echo ${d:-"VD_2"}; fi)
}


# Pass all the arguments given to the script to the parser function
parser "$@"


echo $CREATE $DELETE $VAR1 $VAR2 $VAR3 $VAR4 $cats $dir

কিছু রেফারেন্স

  • মূল পদ্ধতিটি এখানে পাওয়া গেল ।
  • আরো একটি ফাংশন সব আর্গুমেন্ট ক্ষণস্থায়ী সম্পর্কে এখানে
  • এখানে ডিফল্ট মান সম্পর্কিত আরও তথ্য ।
  • সম্পর্কে আরও তথ্য declareDo $ bash -c "help declare"
  • সম্পর্কে আরও তথ্য shiftDo $ bash -c "help shift"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.