bash - আমি কিভাবে ব্যাশে একটি ডিলিমিটারে একটি স্ট্রিং বিভক্ত করব?




shell split (20)

সামঞ্জস্যপূর্ণ উত্তর

এই SO প্রশ্নে, ইতিমধ্যে ব্যাশে এটি করার অনেকগুলি ভিন্ন উপায় রয়েছে। কিন্তু bashism অনেক বিশেষ বৈশিষ্ট্য রয়েছে, যা bashism নামে bashism যা ভালভাবে কাজ করে, তবে এটি অন্য bashism কাজ করবে না।

বিশেষ করে, অ্যারে , অ্যাসোসিয়েট অ্যারে এবং প্যাটার্ন প্রতিস্থাপন বিশুদ্ধ bashisms হয় এবং অন্যান্য শেল অধীনে কাজ করতে পারে না।

আমার ডেবিয়ান জিএনইউ / লিনাক্সে , dash নামক একটি স্ট্যান্ডার্ড শেল রয়েছে, তবে আমি ksh জানি যারা ksh ব্যবহার করতে চান।

পরিশেষে, খুব ছোট অবস্থায়, তার নিজস্ব শেল ইন্টারপ্রেটার ( ash ) সহ busybox নামে একটি বিশেষ সরঞ্জাম রয়েছে।

অনুরোধ স্ট্রিং

SO প্রশ্নে স্ট্রিং নমুনা হল:

IN="[email protected];[email protected]"

এটি হোয়াইটস্পেসগুলির সাথে উপযোগী হতে পারে এবং হোয়াইটস্পেসগুলি রুটিন ফলাফলকে সংশোধন করতে পারে, আমি এই নমুনা স্ট্রিংটি ব্যবহার করতে পছন্দ করি:

 IN="[email protected];[email protected];Full Name <[email protected]>"

বিছানায় বিভক্তকারীর উপর ভিত্তি করে বিভক্ত স্ট্রিং (সংস্করণ> = 4.2)

বিশুদ্ধ bash অধীনে, আমরা অ্যারে এবং আইএফএস ব্যবহার করতে পারেন:

var="[email protected];[email protected];Full Name <[email protected]>"

oIFS="$IFS"
IFS=";"
declare -a fields=($var)
IFS="$oIFS"
unset oIFS

IFS=\; read -a fields <<<"$IN"

সাম্প্রতিক ব্যাশের অধীনে এই সিনট্যাক্স ব্যবহার করে বর্তমান সেশনের জন্য $IFS পরিবর্তন করবেন না, তবে শুধুমাত্র বর্তমান কমান্ডের জন্য:

set | grep ^IFS=
IFS=$' \t\n'

এখন স্ট্রিং var বিভক্ত এবং একটি অ্যারের মধ্যে সংরক্ষিত (নামযুক্ত fields ):

set | grep ^fields=\\\|^var=
fields=([0]="[email protected]" [1]="[email protected]" [2]="Full Name <[email protected]>")
var='[email protected];[email protected];Full Name <[email protected]>'

আমরা declare -p সঙ্গে পরিবর্তনশীল কন্টেন্ট জন্য অনুরোধ করতে পারে:

declare -p IN fields
declare -- IN="[email protected];[email protected];Full Name <[email protected]>"
declare -a fields=([0]="[email protected]" [1]="[email protected]" [2]="Full Name <[email protected]>")

read split করতে দ্রুততম উপায়, কারণ কোন ফর্ক এবং কোন বাহ্যিক সম্পদ বলা হয়।

সেখান থেকে, আপনি প্রতিটি ক্ষেত্রটি প্রক্রিয়াকরণের জন্য ইতিমধ্যে জানেন এমন সিনট্যাক্সটি ব্যবহার করতে পারেন:

for x in "${fields[@]}";do
    echo "> [$x]"
    done
> [[email protected].com]
> [[email protected].com]
> [Full Name <[email protected].org>]

বা প্রক্রিয়াকরণের পরে প্রতিটি ক্ষেত্র ড্রপ করুন (আমি এই স্থানান্তর পদ্ধতি পছন্দ করি):

while [ "$fields" ] ;do
    echo "> [$fields]"
    fields=("${fields[@]:1}")
    done
> [[email protected].com]
> [[email protected].com]
> [Full Name <[email protected].org>]

অথবা এমনকি সহজ মুদ্রণ (ছোট সংকেত) জন্য:

printf "> [%s]\n" "${fields[@]}"
> [[email protected].com]
> [[email protected].com]
> [Full Name <[email protected].org>]

আপডেট: সাম্প্রতিক bash > = 4.4

আপনি mapfile দিয়ে খেলতে পারে:

mapfile -td \; fields < <(printf "%s\0" "$IN")

এই সিনট্যাক্স বিশেষ অক্ষর, newlines এবং খালি ক্ষেত্র সংরক্ষণ!

যদি আপনি খালি ক্ষেত্রগুলির বিষয়ে উদ্বিগ্ন না হন তবে আপনি:

mapfile -td \; fields <<<"$IN"
fields=("${fields[@]%$'\n'}")   # drop '\n' added by '<<<'

কিন্তু আপনি ফাংশন মাধ্যমে ক্ষেত্র ব্যবহার করতে পারে:

myPubliMail() {
    printf "Seq: %6d: Sending mail to '%s'..." $1 "$2"
    # mail -s "This is not a spam..." "$2" </path/to/body
    printf "\e[3D, done.\n"
}

mapfile < <(printf "%s\0" "$IN") -td \; -c 1 -C myPubliMail

(নোটা: \0 স্ট্র্যাটেজের শেষে স্ট্রিং শেষে ফাঁকা ক্ষেত্রগুলির যত্ন না থাকলে ফরম্যাট স্ট্রিংটির শেষে \0 )

mapfile < <(echo -n "$IN") -td \; -c 1 -C myPubliMail

ভালো কিছু প্রদান করবে:

Seq:      0: Sending mail to '[email protected]', done.
Seq:      1: Sending mail to '[email protected]', done.
Seq:      2: Sending mail to 'Full Name <[email protected]>', done.

বা নতুন লাইন যোগ করুন <<< ফাংশন মধ্যে bash সিনট্যাক্স যোগ করা হয়েছে:

myPubliMail() {
    local seq=$1 dest="${2%$'\n'}"
    printf "Seq: %6d: Sending mail to '%s'..." $seq "$dest"
    # mail -s "This is not a spam..." "$dest" </path/to/body
    printf "\e[3D, done.\n"
}

mapfile <<<"$IN" -td \; -c 1 -C myPubliMail

একই আউটপুট রেন্ডার হবে:

Seq:      0: Sending mail to '[email protected]', done.
Seq:      1: Sending mail to '[email protected]', done.
Seq:      2: Sending mail to 'Full Name <[email protected]>', done.

shell মধ্যে ডিলিমিটার উপর ভিত্তি করে বিভক্ত স্ট্রিং

কিন্তু যদি আপনি অনেক শেল অধীনে ব্যবহারযোগ্য কিছু লিখতে হবে, আপনি bashisms ব্যবহার করতে হবে না

সার্টিফের প্রথম বা শেষ ঘটনার মধ্যে একটি স্ট্রিং বিভক্ত করার জন্য, অনেক শেলগুলিতে ব্যবহৃত একটি সিনট্যাক্স রয়েছে:

${var#*SubStr}  # will drop begin of string up to first occur of `SubStr`
${var##*SubStr} # will drop begin of string up to last occur of `SubStr`
${var%SubStr*}  # will drop part of string from last occur of `SubStr` to the end
${var%%SubStr*} # will drop part of string from first occur of `SubStr` to the end

(এই অনুপস্থিতি আমার উত্তর প্রকাশনার প্রধান কারণ;)

Score_Under দ্বারা নির্দেশিত হিসাবে:

# এবং % সর্বনিম্ন সম্ভাব্য মিলিং স্ট্রিং মুছে ফেলুন, এবং

## এবং %% দীর্ঘতম সম্ভব মুছে দিন।

যেখানে # এবং ## স্ট্রিং বাম (শুরু) থেকে, এবং

স্ট্রিংয়ের ডান (শেষ) থেকে % এবং %% meand।

এই সামান্য নমুনা স্ক্রিপ্টটি bash , dash , ksh , ksh অধীনে ভালভাবে কাজ করে এবং ম্যাক-ওএস এর ব্যাশের অধীনেও এটি পরীক্ষা করে দেখানো হয়েছিল:

var="[email protected];[email protected];Full Name <[email protected]>"
while [ "$var" ] ;do
    iter=${var%%;*}
    echo "> [$iter]"
    [ "$var" = "$iter" ] && \
        var='' || \
        var="${var#*;}"
  done
> [[email protected].com]
> [[email protected].com]
> [Full Name <[email protected].org>]

আনন্দ কর!

আমি একটি পরিবর্তনশীল মধ্যে সংরক্ষিত এই স্ট্রিং আছে:

IN="[email protected];[email protected]"

এখন আমি স্ট্রিং বিভক্ত করতে চাই ; ডিলিমিটার যাতে আমার আছে:

ADDR1="[email protected]"
ADDR2="[email protected]"

আমি অগত্যা ADDR1 এবং ADDR2 ভেরিয়েবল প্রয়োজন হয় না। যদি তারা একটি অ্যারের উপাদান যা আরও ভাল হয়।

নীচের উত্তর থেকে পরামর্শের পর, আমি নিম্নলিখিতগুলির সাথে শেষ হল যা আমি পরে ছিলাম:

#!/usr/bin/env bash

IN="[email protected];[email protected]"

mails=$(echo $IN | tr ";" "\n")

for addr in $mails
do
    echo "> [$addr]"
done

আউটপুট:

> [[email protected].com]
> [[email protected].com]

Internal_field_separator (IFS) সেটিং সহ একটি সমাধান ছিল ; । আমি নিশ্চিত নই যে উত্তরটি কী হয়েছে, আপনি কিভাবে ডিফল্টভাবে IFS পুনরায় সেট করবেন?

RE: IFS সমাধান, আমি এটি চেষ্টা করে এবং এটি কাজ করে, আমি পুরানো IFS রাখি এবং তারপরে এটি পুনঃস্থাপন করি:

IN="[email protected];[email protected]"

OIFS=$IFS
IFS=';'
mails2=$IN
for x in $mails2
do
    echo "> [$x]"
done

IFS=$OIFS

বিটিডব্লিউ, যখন আমি চেষ্টা করেছি

mails2=($IN)

এটি কেবলমাত্র প্রথম স্ট্রিংটি যখন লুপে মুদ্রণ করে তখন এটি প্রায় $IN ছাড়া কাজ করে।


আইএফএস সেটিং ছাড়া

আপনি যদি শুধুমাত্র একটি কোলন থাকে তবে আপনি এটি করতে পারেন:

a="foo:bar"
b=${a%:*}
c=${a##*:}

তুমি পাবে:

b = foo
c = bar

আপনি অনেক পরিস্থিতিতে awk আবেদন করতে পারেন

echo "[email protected];[email protected]"|awk -F';' '{printf "%s\n%s\n", $1, $2}'

এছাড়াও আপনি এই ব্যবহার করতে পারেন

echo "[email protected];[email protected]"|awk -F';' '{print $1,$2}' OFS="\n"

আপনি অবিলম্বে তাদের প্রক্রিয়াকরণ মনে না হলে, আমি এটা করতে চান:

for i in $(echo $IN | tr ";" "\n")
do
  # process
done

আপনি একটি অ্যারে আরম্ভ করতে এই ধরনের লুপ ব্যবহার করতে পারেন, কিন্তু সম্ভবত এটি করার একটি সহজ উপায়। আশা করি, যদিও এই সাহায্য করে।


আমি কমান্ড কমান্ড উল্লেখ করে কয়েকটি উত্তর দেখেছি, কিন্তু তাদের সব মুছে ফেলা হয়েছে। এটি একটি সামান্য বিজোড় যে কেউ এটি সম্পর্কে বিস্তারিতভাবে বিবৃত করেনি, কারণ আমি মনে করি এটি এই ধরনের জিনিস করার জন্য আরও দরকারী কমান্ডগুলির মধ্যে একটি, বিশেষত সীমিত লগ ফাইলগুলিকে বিশ্লেষণ করার জন্য।

এই নির্দিষ্ট উদাহরণটি একটি ব্যাশ স্ক্রিপ্ট অ্যারেতে বিভক্ত করার ক্ষেত্রে, সম্ভবত এটি আরও দক্ষ, তবে cut ব্যবহার করা যেতে পারে এবং যদি আপনি মাঝখান থেকে নির্দিষ্ট ক্ষেত্রগুলি টেনে আনতে চান তবে আরো কার্যকরী।

উদাহরণ:

$ echo "[email protected];[email protected]" | cut -d ";" -f 1
[email protected].com
$ echo "[email protected];[email protected]" | cut -d ";" -f 2
[email protected].com

আপনি সম্ভবত একটি লুপ মধ্যে যে স্থাপন করতে পারেন, এবং প্রতিটি ক্ষেত্র স্বাধীনভাবে টান করতে -F পরামিতি পুনরাবৃত্তি।

যখন আপনার কাছে সারিগুলির সাথে একটি সীমিত লগ ফাইল থাকে তখন এটি আরও দরকারী হয়ে যায়:

2015-04-27|12345|some action|an attribute|meta data

cut এই ফাইল cat সক্ষম হতে এবং খুব প্রক্রিয়াকরণের জন্য একটি নির্দিষ্ট ক্ষেত্র নির্বাচন করতে খুব সহজ।


আমি মনে করি AWK আপনার সমস্যার সমাধান করার জন্য সর্বোত্তম এবং দক্ষ কমান্ড। প্রায় প্রতিটি লিনাক্স বিতরণে AWK ডিফল্টরূপে বাশে অন্তর্ভুক্ত।

echo "[email protected];[email protected]" | awk -F';' '{print $1,$2}'

দিতে হবে

[email protected].com [email protected].com

অবশ্যই আপনি awk মুদ্রণ ক্ষেত্র redefining দ্বারা প্রতিটি ইমেল ঠিকানা সংরক্ষণ করতে পারেন।


এখানে একটি পরিষ্কার 3-মাছ ধরার নৌকা হয়:

in="[email protected];[email protected];[email protected];[email protected]"
IFS=';' list=($in)
for item in "${list[@]}"; do echo $item; done

বিভাজক উপর ভিত্তি করে IFS delimit শব্দ এবং () একটি array তৈরি করতে ব্যবহৃত হয়। তারপরে [@] প্রতিটি আইটেমটি আলাদা শব্দ হিসাবে ফেরত দেওয়ার জন্য ব্যবহৃত হয়।

তারপরে আপনার যদি কোনও কোড থাকে তবে আপনাকে $IFS পুনরুদ্ধার করতে হবে, উদাহরণস্বরূপ unset IFS


এখানে কিছু শীতল উত্তর আছে (ত্রুটিপূর্ণ esp।), কিন্তু অন্যান্য ভাষার মধ্যে বিভক্ত অনুরূপ কিছু - যা আমি মূল প্রশ্নটিকে বোঝাতে চেয়েছি - আমি এই বিষয়ে স্থির হয়েছি:

IN="[email protected];[email protected]"
declare -a a="(${IN/;/ })";

এখন ${a[0]} , ${a[1]} , ইত্যাদি আপনি যেমন আশা করবেন। পদ সংখ্যা জন্য ${#a[*]} ব্যবহার করুন। বা অবশ্যই, পুনরাবৃত্তি অবশ্যই:

for i in ${a[*]}; do echo $i; done

গুরুত্বপূর্ণ তথ্য:

এটি এমন কোনও ক্ষেত্রে কাজ করে যেখানে উদ্বেগ নেই, যা আমার সমস্যার সমাধান করে, কিন্তু আপনার সমাধান নাও করতে পারে। সেই ক্ষেত্রে $IFS সমাধান (গুলি) দিয়ে যান।


এটি করার সবচেয়ে সহজ উপায়।

spo='one;two;three'
OIFS=$IFS
IFS=';'
spo_array=($spo)
IFS=$OIFS
echo ${spo_array[*]}

এটিও কাজ করে:

IN="[email protected];[email protected]"
echo ADD1=`echo $IN | cut -d \; -f 1`
echo ADD2=`echo $IN | cut -d \; -f 2`

সতর্ক থাকুন, এই সমাধান সবসময় সঠিক নয়। যদি আপনি শুধুমাত্র "[email protected]" পাস করেন তবে এটি এটি ADD1 এবং ADD2 উভয়কেই বরাদ্দ করবে।


দুটি বোর্নে-ইসহ বিকল্পগুলি যেখানে ব্যাশ অ্যারেগুলির প্রয়োজন নেই:

কেস 1 : এটি সুন্দর এবং সহজ রাখুন: রেকর্ড-বিভাজক হিসাবে একটি নতুন লাইনে ব্যবহার করুন ... উদাহরণস্বরূপ।

IN="[email protected]
[email protected]"

while read i; do
  # process "$i" ... eg.
    echo "[email:$i]"
done <<< "$IN"

দ্রষ্টব্য: এই প্রথম ক্ষেত্রে কোন উপ-প্রক্রিয়া তালিকা ম্যানিপুলেশন সহায়তায় ফর্ক করা হয়।

আইডিয়া: সম্ভবত এটি অভ্যন্তরীণভাবে NL ব্যবহার করে মূল্যবান, এবং কেবলমাত্র একটি পৃথক আরএস রূপান্তরিত হয় যখন চূড়ান্ত ফলাফলটি বাহ্যিকভাবে তৈরি করে

কেস ২ : একটি ";" ব্যবহার একটি রেকর্ড বিভাজক হিসাবে ... যেমন।

NL="
" IRS=";" ORS=";"

conv_IRS() {
  exec tr "$1" "$NL"
}

conv_ORS() {
  exec tr "$NL" "$1"
}

IN="[email protected];[email protected]"
IN="$(conv_IRS ";" <<< "$IN")"

while read i; do
  # process "$i" ... eg.
    echo -n "[email:$i]$ORS"
done <<< "$IN"

উভয় ক্ষেত্রেই একটি সাব-তালিকা লুপের মধ্যে তৈরি করা যেতে পারে লুপটি সম্পন্ন হওয়ার পরেই স্থায়ী হয়। মেমরির তালিকাগুলি ম্যানিপুলিউটিং করার সময় ফাইলগুলিতে তালিকা সংরক্ষণ করার সময় এটি কার্যকর। {ps শান্ত থাকুন এবং বি বহন করুন)}}


নিম্নলিখিত বশ / zsh ফাংশন দ্বিতীয় যুক্তি দ্বারা প্রদত্ত delimiter তার প্রথম যুক্তি বিভক্ত:

split() {
    local string="$1"
    local delimiter="$2"
    if [ -n "$string" ]; then
        local part
        while read -d "$delimiter" part; do
            echo $part
        done <<< "$string"
        echo $part
    fi
}

উদাহরণস্বরূপ, কমান্ড

$ split 'a;b;c' ';'

উৎপাদনের

a
b
c

উদাহরণস্বরূপ, এই আউটপুট অন্যান্য কমান্ডের পাইপ করা যেতে পারে। উদাহরণ:

$ split 'a;b;c' ';' | cat -n
1   a
2   b
3   c

দেওয়া অন্যান্য সমাধান তুলনায়, এই এক নিম্নলিখিত সুবিধা আছে:

  • IFS হয় না: এমনকি স্থানীয় ভেরিয়েবলগুলির গতিশীল স্কোপিংয়ের কারণে, লুপের উপর IFS ওভাররাইড করার ফলে নতুন মানটি লুপের মধ্যে থেকে ফাংশন কলগুলিতে ফুটো হয়ে যায়।

  • অ্যারে ব্যবহার করা হয় না: পঠন ব্যবহার করে একটি অ্যারেতে একটি স্ট্রিং read জন্য ঝ্যাশ-এ ব্যাশ এবং A-এ zsh প্রয়োজন।

ইচ্ছা করলে, ফাংশনটি নিম্নরূপ একটি স্ক্রিপ্টে রাখা যেতে পারে:

#!/usr/bin/env bash

split() {
    # ...
}

split "[email protected]"

যদি কোন স্থান না থাকে, তাহলে কেন?

IN="[email protected];[email protected]"
arr=(`echo $IN | tr ';' ' '`)

echo ${arr[0]}
echo ${arr[1]}


বাশ শেল স্ক্রিপ্ট বিভক্ত অ্যারে থেকে নেওয়া:

IN="[email protected];[email protected]"
arrIN=(${IN//;/ })

ব্যাখ্যা:

এই নির্মাণের সমস্ত ঘটনা প্রতিস্থাপন করে ';' (প্রাথমিক // মানে গ্লোবাল প্রতিস্থাপন) ' ' (একটি একক স্পেস) দিয়ে স্ট্রিং-এ, তারপর অ্যারে হিসাবে স্থান-বিভক্ত স্ট্রিংটি ব্যাখ্যা করে (যা আশেপাশের বন্ধনীগুলি করে)।

প্রতিটি ';' প্রতিস্থাপন করার জন্য কোঁকড়া ধনুর্বন্ধনী ভিতরে ব্যবহৃত সিনট্যাক্স ';' একটি অক্ষর দিয়ে চরিত্রকে পরামিতি সম্প্রসারণ বলা হয়।

কিছু সাধারণ গোষ্ঠী আছে:

  1. যদি মূল স্ট্রিংটিতে স্পেস থাকে তবে আপনাকে IFS ব্যবহার করতে হবে:
    • IFS=':'; arrIN=($IN); unset IFS;
  2. যদি মূল স্ট্রিংটি স্পেস এবং ডিলিমিটারটি একটি নতুন লাইন থাকে তবে আপনি IFS সেট করতে পারেন:
    • IFS=$'\n'; arrIN=($IN); unset IFS;

অ্যান্ড্রয়েড শেলের মধ্যে, প্রস্তাবিত পদ্ধতিগুলি বেশিরভাগই কাজ করে না:

$ IFS=':' read -ra ADDR <<<"$PATH"                             
/system/bin/sh: can't create temporary file /sqlite_stmt_journals/mksh.EbNoR10629: No such file or directory

কাজ কি করে:

$ for i in ${PATH//:/ }; do echo $i; done
/sbin
/vendor/bin
/system/sbin
/system/bin
/system/xbin

যেখানে //বিশ্বব্যাপী প্রতিস্থাপন মানে।


'এক' দ্বারা পৃথক একটি স্ট্রিং বিভক্ত একটি এক-মাছ ধরার নৌকা ;; একটি অ্যারের মধ্যে হয়:

IN="[email protected];[email protected]"
ADDRS=( $(IFS=";" echo "$IN") )
echo ${ADDRS[0]}
echo ${ADDRS[1]}

এটি কেবল একটি উপশিরিতে আইএফএস সেট করে, তাই আপনাকে তার মান সংরক্ষণ এবং পুনরুদ্ধার করার বিষয়ে চিন্তা করতে হবে না।


ইতিমধ্যে প্রদত্ত চমত্কার উত্তরগুলি ছাড়াও, এটি ব্যবহার করা যেতে পারে এমন ডেটা মুদ্রণ করার ক্ষেত্রে এটি কেবলমাত্র একটি বিষয় awk:

awk -F";" '{for (i=1;i<=NF;i++) printf("> [%s]\n", $i)}' <<< "$IN"

এটি ক্ষেত্র বিভাজক সেট করে ;, যাতে এটি একটি forলুপ সহ ক্ষেত্রের মাধ্যমে লুপ এবং সেই অনুযায়ী মুদ্রণ করতে পারে।

পরীক্ষা

$ IN="[email protected];[email protected]"
$ awk -F";" '{for (i=1;i<=NF;i++) printf("> [%s]\n", $i)}' <<< "$IN"
> [[email protected].com]
> [[email protected].com]

অন্য ইনপুট দিয়ে:

$ awk -F";" '{for (i=1;i<=NF;i++) printf("> [%s]\n", $i)}' <<< "a;b;c   d;e_;f"
> [a]
> [b]
> [c   d]
> [e_]
> [f]


IN='[email protected];[email protected];Charlie Brown <[email protected];!"#$%&/()[]{}*? are no problem;simple is beautiful :-)'
set -f
oldifs="$IFS"
IFS=';'; arrayIN=($IN)
IFS="$oldifs"
for i in "${arrayIN[@]}"; do
echo "$i"
done
set +f

আউটপুট:

[email protected].com
[email protected].com
Charlie Brown <[email protected].com
!"#$%&/()[]{}*? are no problem
simple is beautiful :-)

ব্যাখ্যা: বন্ধনী ব্যবহার করে সরল অ্যাসাইনমেন্ট () একটি অর্থে সেমিকোলন বিভাজিত তালিকাকে রূপান্তরিত করে তবে এটি করার সময় আপনার সঠিক আইএফএস থাকে। লুপ জন্য আদর্শ স্বাভাবিক হিসাবে যে অ্যারের মধ্যে পৃথক আইটেম পরিচালনা করে। লক্ষ্য করুন যে IN পরিবর্তনশীলের জন্য দেওয়া তালিকাটি অবশ্যই "হার্ড" উদ্ধৃত হওয়া উচিত, যা একক টিক্স দিয়ে।

আইএএসএস অবশ্যই সংরক্ষিত এবং পুনঃস্থাপিত হওয়া উচিত যেহেতু বাশ কোনও অ্যাসাইনমেন্টকে কমান্ডের মতো আচরণ করে না। একটি বিকল্প কাজকর্ম একটি ফাংশন ভিতরে অ্যাসাইনমেন্ট মোড়ানো এবং একটি সংশোধিত আইএফএস সঙ্গে যে কল কল। যে ক্ষেত্রে আইএফএস পৃথক সঞ্চয় / পুনরুদ্ধারের প্রয়োজন হয় না। যে বিন্দু জন্য "Bize" জন্য ধন্যবাদ।





scripting