বাশে স্ট্রিংগুলির একটি অ্যারের মাধ্যমে লুপ?


1498

আমি এমন একটি স্ক্রিপ্ট লিখতে চাই যা 15 টি স্ট্রিংয়ের মধ্য দিয়ে চলে যায় (সম্ভবত অ্যারে?) এটি কি সম্ভব?

কিছুটা এইরকম:

for databaseName in listOfNames
then
  # Do something
end

উত্তর:


2383

আপনি এটি এর মতো ব্যবহার করতে পারেন:

## declare an array variable
declare -a arr=("element1" "element2" "element3")

## now loop through the above array
for i in "${arr[@]}"
do
   echo "$i"
   # or do whatever with individual element of the array
done

# You can access them using echo "${arr[0]}", "${arr[1]}" also

মাল্টি-লাইন অ্যারে ঘোষণার জন্যও কাজ করে

declare -a arr=("element1" 
                "element2" "element3"
                "element4"
                )

775

অবশ্যই এটি সম্ভব।

for databaseName in a b c d e f; do
  # do something like: echo $databaseName
done 

বিশদের জন্য এবং যখন পর্যন্ত ব্যাশ লুপগুলি দেখুন ।


18
এই পদ্ধতির সমস্যা কি? সাধারণ ক্ষেত্রে এটি কাজ করে বলে মনে হচ্ছে এবং তারপরে @ অনুভার উত্তর চেয়ে বেশি স্বজ্ঞাত।
ডাঃ জানু-ফিলিপ গেহর্কেকে

17
এটি কমান্ড প্রতিস্থাপনের সাথে বিশেষত ভাল কাজ করে, যেমন for year in $(seq 2000 2013)
ব্র্যাড কোচ

22
সমস্যাটি হ'ল তিনি একটি অ্যারের মাধ্যমে পুনরাবৃত্তি সম্পর্কে জিজ্ঞাসা করেছিলেন।
23 মিনিটে মগলগগুলি

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

15
কেন এটি # 1 নয়? এটি পরিষ্কার, এবং আপনি কেবল একটি স্ট্রিং সেট করে, সহজেই অ্যারেটিকে পুনরায় ব্যবহার করতে পারেন DATABASES="a b c d e f"
নেরডমাস্টার 21

201

এই উত্তরগুলির মধ্যে কোনওটিতে একটি কাউন্টার অন্তর্ভুক্ত নয় ...

#!/bin/bash
## declare an array variable
declare -a array=("one" "two" "three")

# get length of an array
arraylength=${#array[@]}

# use for loop to read all values and indexes
for (( i=1; i<${arraylength}+1; i++ ));
do
  echo $i " / " ${arraylength} " : " ${array[$i-1]}
done

আউটপুট:

1  /  3  :  one
2  /  3  :  two
3  /  3  :  three

7
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত, কেবলমাত্র একমাত্র কাজ করে যখন অ্যারের উপাদানগুলিতে ফাঁক থাকে।
jesjimher

1
এটি কেবলমাত্র একটি কাউন্টার সহ উদাহরণের আউটপুট খাওয়ার জন্য। এটি পরিবর্তন করাও বেশ তুচ্ছ, এবং ঠিক একইরকম কাজ করে।
ক্যাকটাক্স

7
শেষের প্রতিধ্বনিটি বগি। আপনার ধ্রুবকগুলি উদ্ধৃত করার দরকার নেই, আপনাকে বিস্তৃতি উদ্ধৃত করতে হবে, বা নিরাপদে কেবল উভয়ই উদ্ধৃত করতে পারেন নীচে: echo "$i / ${arraylength} : ${array[$i-1]}"- অন্যথায়, যদি আপনার $iকোনও গ্লোব থাকে তবে এটি প্রসারিত হবে, যদি এটিতে কোনও ট্যাব থাকে তবে এটিতে পরিবর্তিত হবে একটি স্পেস, ইত্যাদি
চার্লস ডাফি

10
@bzeaman, অবশ্যই - তবে আপনি যদি এই ধরণের বিষয়ে নিবিড় হয়ে থাকেন তবে কিছু সঠিক প্রমাণ করার জন্য এটি প্রাসঙ্গিক বিশ্লেষণের প্রয়োজন (যেমন আপনি ঠিক আগে করেছিলেন) এবং যদি সেই প্রসঙ্গে পরিবর্তন হয় বা কোডটি অন্য কোনও জায়গায় ব্যবহার করা হয় বা পুনরায় বিশ্লেষণ করা হয় অন্য যে কোনও কারণেই অপ্রত্যাশিত নিয়ন্ত্রণ প্রবাহ সম্ভব। এটিকে শক্তিশালী উপায়ে লিখুন এবং প্রসঙ্গ নির্বিশেষে এটি সঠিক।
চার্লস ডাফি

5
এটি একটি বিচ্ছিন্ন অ্যারের জন্য কাজ করবে না, অর্থাত্ যদি অ্যারে উপাদানগুলি অনুপস্থিত থাকে। উদাহরণস্বরূপ, যদি আপনার অ্যারে উপাদান রয়েছে [[1] = 'xx', A [4] = 'yy' এবং A [9] = 'zz', দৈর্ঘ্য 3 হবে এবং লুপটি সমস্ত উপাদানগুলিতে প্রক্রিয়া করবে না ।
মিঃ এড

144

হ্যাঁ

for Item in Item1 Item2 Item3 Item4 ;
  do
    echo $Item
  done

আউটপুট:

Item1
Item2
Item3
Item4

স্থান সংরক্ষণ; একক বা ডাবল উদ্ধৃতি তালিকার এন্ট্রি এবং ডাবল উদ্ধৃতি তালিকার বিস্তৃতি।

for Item in 'Item 1' 'Item 2' 'Item 3' 'Item 4' ;
  do
    echo "$Item"
  done

আউটপুট:

Item 1
Item 2
Item 3
Item 4

একাধিক লাইনে তালিকা তৈরি করতে

for Item in Item1 \
            Item2 \
            Item3 \
            Item4
  do
    echo $Item
  done

আউটপুট:

Item1
Item2
Item3
Item4


সাধারণ তালিকা পরিবর্তনশীল

List=( Item1 Item2 Item3 )

অথবা

List=(
      Item1 
      Item2 
      Item3
     )

তালিকা পরিবর্তনশীল প্রদর্শন করুন:

echo ${List[*]}

আউটপুট:

Item1 Item2 Item3

তালিকার মধ্য দিয়ে লুপ করুন:

for Item in ${List[*]} 
  do
    echo $Item 
  done

আউটপুট:

Item1
Item2
Item3

একটি তালিকা যেতে একটি ফাংশন তৈরি করুন:

Loop(){
  for item in ${*} ; 
    do 
      echo ${item} 
    done
}
Loop ${List[*]}

তালিকা তৈরি করতে ডিক্লেয়ার কীওয়ার্ড (কমান্ড) ব্যবহার করে একে প্রযুক্তিগতভাবে অ্যারে বলা হয়:

declare -a List=(
                 "element 1" 
                 "element 2" 
                 "element 3"
                )
for entry in "${List[@]}"
   do
     echo "$entry"
   done

আউটপুট:

element 1
element 2
element 3

একটি সহযোগী অ্যারে তৈরি করা হচ্ছে। একটি অভিধান:

declare -A continent

continent[Vietnam]=Asia
continent[France]=Europe
continent[Argentina]=America

for item in "${!continent[@]}"; 
  do
    printf "$item is in ${continent[$item]} \n"
  done

আউটপুট:

 Argentina is in America
 Vietnam is in Asia
 France is in Europe

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

List="Item 1,Item 2,Item 3"
Backup_of_internal_field_separator=$IFS
IFS=,
for item in $List; 
  do
    echo $item
  done
IFS=$Backup_of_internal_field_separator

আউটপুট:

Item 1
Item 2
Item 3

তাদের সংখ্যা প্রয়োজন হলে:

` 

একে ব্যাক টিক বলা হয়। কমান্ডটি পিছনে টিক্সের ভিতরে রাখুন।

`commend` 

এটি আপনার কীবোর্ডের এক নম্বর এবং ট্যাব কীর উপরে। একটি প্রমিত আমেরিকান ইংরেজি ভাষার কীবোর্ডে।

List=()
Start_count=0
Step_count=0.1
Stop_count=1
for Item in `seq $Start_count $Step_count $Stop_count`
    do 
       List+=(Item_$Item)
    done
for Item in ${List[*]}
    do 
        echo $Item
    done

আউটপুট হল:

Item_0.0
Item_0.1
Item_0.2
Item_0.3
Item_0.4
Item_0.5
Item_0.6
Item_0.7
Item_0.8
Item_0.9
Item_1.0

বাশার আচরণের সাথে আরও পরিচিত হওয়া:

একটি ফাইল একটি তালিকা তৈরি করুন

cat <<EOF> List_entries.txt
Item1
Item 2 
'Item 3'
"Item 4"
Item 7 : *
"Item 6 : * "
"Item 6 : *"
Item 8 : $PWD
'Item 8 : $PWD'
"Item 9 : $PWD"
EOF

একটি তালিকাতে তালিকাতে ফাইলটি পড়ুন এবং প্রদর্শন করুন

List=$(cat List_entries.txt)
echo $List
echo '$List'
echo "$List"
echo ${List[*]}
echo '${List[*]}'
echo "${List[*]}"
echo ${List[@]}
echo '${List[@]}'
echo "${List[@]}"

BASH কমান্ডলাইন রেফারেন্স ম্যানুয়াল: শেলের নির্দিষ্ট অক্ষর বা শব্দের বিশেষ অর্থ।


7
এটা ভুল. উদ্ধৃতি সহ"${List[@]}" , সঠিক হওয়া দরকার । ভূল. ভূল. চেষ্টা করুন - আপনি এর জন্য সঠিক আচরণ পাবেন তবে অন্য কোনও রূপ থেকে নয়। ${List[@]}${List[*]}List=( "* first item *" "* second item *" )for item in "${List[@]}"; do echo "$item"; done
চার্লস ডফি

হ্যাঁ বিশেষ চরিত্রগুলি ব্যাখ্যা করতে পারে যা পছন্দসই বা নাও হতে পারে। আমি অন্তর্ভুক্ত উত্তর আপডেট।
ফায়ারইনস্কি

2
আমি এখনও দৃ more়ভাবে আরও সঠিক / দৃ approach় পদ্ধতির প্রথমে দেখানোর পরামর্শ দেব । লোকেরা প্রায়শই প্রথম উত্তরটি নেয় যা দেখে মনে হয় এটি কার্যকর হবে; যদি সেই উত্তরটির গোপনীয়তা থাকে তবে তারা কেবল পরে তা প্রকাশ করতে পারে। (এটা শুধু ওয়াইল্ডকার্ড যে উদ্ধৃতি অভাব ভাঙা হয় না; List=( "first item" "second item" )বা ভাঙ্গা হবে first, item, second, itemপাশাপাশি)।
চার্লস ডাফি

আপনি এমন একটি উদাহরণ ব্যবহার এড়ানো বিবেচনাও করতে পারেন যা সর্বোত্তম অনুশীলনের লঙ্ঘন হিসাবে লোককে lsআউটপুট পার্স করতে পারে ।
চার্লস ডাফি

1
আমি কখনও দাবি করি না এমন দাবি আপনি অস্বীকার করছেন। আমি বাশের
চার্লস ডাফি

108

4 তম জবাবের মতো একই চেতনায়:

listOfNames="RA
RB
R C
RD"

# To allow for other whitespace in the string:
# 1. add double quotes around the list variable, or
# 2. see the IFS note (under 'Side Notes')

for databaseName in "$listOfNames"   #  <-- Note: Added "" quotes.
do
  echo "$databaseName"  # (i.e. do action / processing of $databaseName here...)
done

# Outputs
# RA
# RB
# R C
# RD

খ। নামগুলিতে কোনও সাদা জায়গা নেই:

listOfNames="RA
RB
R C
RD"

for databaseName in $listOfNames  # Note: No quotes
do
  echo "$databaseName"  # (i.e. do action / processing of $databaseName here...)
done

# Outputs
# RA
# RB
# R
# C
# RD

মন্তব্য

  1. দ্বিতীয় উদাহরণে, ব্যবহারের listOfNames="RA RB R C RD"একই আউটপুট রয়েছে।

ডেটা আনার অন্যান্য উপায়গুলির মধ্যে রয়েছে:

স্টিডিন থেকে পড়ুন

# line delimited (each databaseName is stored on a line)
while read databaseName
do
  echo "$databaseName"  # i.e. do action / processing of $databaseName here...
done # <<< or_another_input_method_here
  1. ব্যাশ আইএফএস "ক্ষেত্রের বিভাজকরেখার লাইনে" [ 1 ] ডিলিমিটার স্ক্রিপ্টে নির্দিষ্ট করা যেতে পারে অন্য সাদা জায়গা (যেমন IFS='\n', বা ম্যাকোএসের জন্য IFS='\r')
  2. আমি স্বীকৃত উত্তরটিও পছন্দ করি :) - আমি এই স্নিপেটগুলিকে অন্যান্য সহায়ক উপায় হিসাবে অন্তর্ভুক্ত করেছি যা প্রশ্নেরও উত্তর দেয়।
  3. #!/bin/bashস্ক্রিপ্ট ফাইলের শীর্ষে অন্তর্ভুক্ত কার্যকরকরণের পরিবেশকে নির্দেশ করে।
  4. এটি কীভাবে সহজভাবে কোড করা যায় তা নির্ধারণ করতে আমার কয়েক মাস লেগেছিল :)

অন্যান্য উত্স ( লুপ পড়ার সময় )


এটি ইমপ্রেশনটি তৈরি করে যে ইওলটি স্ট্রিং বিভাজক হিসাবে ব্যবহৃত হয় এবং তাই স্ট্রিংগুলির মধ্যে সাদা স্থানগুলি অনুমোদিত। তবে, হোয়াইটস্পেসের সাথে থাকা স্ট্রিংগুলি সাবস্ট্রিংগুলিতে আরও পৃথক করা হয়েছে, এটি খুব খারাপ। আমি মনে করি এই উত্তরটি stackoverflow.com/a/23561892/1083704 আরও ভাল।
Val,

1
@ ভাল, আমি একটি রেফারেন্স সহ কোড মন্তব্য যুক্ত করেছি IFS। (প্রত্যেকের জন্য, IFSএকটি নির্দিষ্ট সীমাবদ্ধকারী নির্দিষ্ট করতে দিন, যা সাবস্ট্রিংগুলিতে পৃথক না হয়ে অন্য সাদা স্থানকে স্ট্রিংগুলিতে অন্তর্ভুক্ত করার অনুমতি দেয়)।
ব্যবহারকারী 2533809

7
এটি আমার পক্ষে কাজ করে না। $databaseNameকেবলমাত্র পুরো তালিকাটি অন্তর্ভুক্ত করে, সুতরাং কেবল একটি একক পুনরাবৃত্তি করে।
অ্যালিকেলজিন-কিলাকা

@ অ্যালিকেলজিন-কিলাকা নীচে আমার উত্তরটি এই সমস্যার সমাধান করে যাতে লুপটি স্ট্রিংয়ের প্রতিটি লাইনের জন্য চালিত হয়।
জেমি

42

এর সিনট্যাক্সটি ব্যবহার করতে পারেন ${arrayName[@]}

#!/bin/bash
# declare an array called files, that contains 3 values
files=( "/etc/passwd" "/etc/group" "/etc/hosts" )
for i in "${files[@]}"
do
    echo "$i"
done

31

অবাক করে দিয়েছেন যে এটি এখনও কেউ পোস্ট করেনি - অ্যারের মাধ্যমে লুপিংয়ের সময় যদি উপাদানগুলির সূচকগুলির প্রয়োজন হয় তবে আপনি এটি করতে পারেন:

arr=(foo bar baz)

for i in ${!arr[@]}
do
    echo $i "${arr[i]}"
done

আউটপুট:

0 foo
1 bar
2 baz

আমি এটিকে "traditionalতিহ্যবাহী" ফর-লুপ শৈলীর চেয়ে অনেক বেশি মার্জিত বলে মনে করি for (( i=0; i<${#arr[@]}; i++ ))

( ${!arr[@]}এবং $iউদ্ধৃত করার দরকার নেই কারণ এগুলি কেবলমাত্র সংখ্যা; কেউ কেউ সেভাবেই উদ্ধৃত করার পরামর্শ দিবে, তবে এটি কেবল ব্যক্তিগত পছন্দ))


2
এটি সত্যই নির্বাচিত উত্তর হওয়া উচিত। 1: এটি সহজ এবং পড়া সহজ। 2: এটি সাদা স্থানকে সঠিকভাবে পরিচালনা করে, কোনও আইএফএস আজেবাজে পাচ্ছে না। 3: এটি স্পার্স অ্যারেগুলি সঠিকভাবে পরিচালনা করে।
মি। মি।

20

এটি পড়তেও সহজ:

FilePath=(
    "/tmp/path1/"    #FilePath[0]
    "/tmp/path2/"    #FilePath[1]
)

#Loop
for Path in "${FilePath[@]}"
do
    echo "$Path"
done

4
এটি আমার জন্য পরিষ্কার এবং কাজকর্মটি (ফাইলপথ অ্যারে উপাদানগুলিতে স্পেস এবং পরিবর্তনশীল বিকল্প সহ) কেবল তখনই যখন আমি ফাইলপ্যাথ অ্যারে সংজ্ঞার আগে আইএফএস ভেরিয়েবলটি সঠিকভাবে সেট করি : IFS=$'\n' এটি এই পরিস্থিতিতেও অন্যান্য সমাধানগুলির জন্য কাজ করতে পারে।
অ্যালান Forsyth

8

স্ক্রিপ্ট বা ফাংশনগুলির জন্য অন্তর্ভুক্ত অ্যারে:

অনুভার সঠিক উত্তর ছাড়াও : লুপের জন্য যদি বেসিক সিনট্যাক্স হয়:

for var in "${arr[@]}" ;do ...$var... ;done

একটি বিশেষ আছে ক্ষেত্রে আছে:

কোনো স্ক্রিপ্টের বা ফাংশন চলমান, আর্গুমেন্ট কমান্ড লাইন পাস নির্ধারিত হবে $@অ্যারে পরিবর্তনশীল, আপনি অ্যাক্সেস করতে পারবেন $1, $2, $3, ইত্যাদি।

এটি দ্বারা (পরীক্ষার জন্য) পপুলেশন করা যায়

set -- arg1 arg2 arg3 ...

এই অ্যারের উপরে একটি লুপটি সহজভাবে লেখা যেতে পারে:

for item ;do
    echo "This is item: $item."
  done

মনে রাখবেন যে সংরক্ষিত কাজ inউপস্থিত নেই এবং কোনও অ্যারে নামও নেই!

নমুনা:

set -- arg1 arg2 arg3 ...
for item ;do
    echo "This is item: $item."
  done
This is item: arg1.
This is item: arg2.
This is item: arg3.
This is item: ....

মনে রাখবেন যে এটির চেয়ে একই is

for item in "$@";do
    echo "This is item: $item."
  done

তারপরে একটি স্ক্রিপ্টে :

#!/bin/bash

for item ;do
    printf "Doing something with '%s'.\n" "$item"
  done

একটি স্ক্রিপ্টের মধ্যে এটি সংরক্ষণ myscript.sh, chmod +x myscript.shতারপর,

./myscript.sh arg1 arg2 arg3 ...
Doing something with 'arg1'.
Doing something with 'arg2'.
Doing something with 'arg3'.
Doing something with '...'.

একটি অনুষ্ঠানে একই :

myfunc() { for item;do cat <<<"Working about '$item'."; done ; }

তারপর

myfunc item1 tiem2 time3
Working about 'item1'.
Working about 'tiem2'.
Working about 'time3'.

7
listOfNames="db_one db_two db_three"
for databaseName in $listOfNames
do
  echo $databaseName
done

বা শুধু

for databaseName in db_one db_two db_three
do
  echo $databaseName
done

7

সহজ উপায় :

arr=("sharlock"  "bomkesh"  "feluda" )  ##declare array

len=${#arr[*]}  # it returns the array length

#iterate with while loop
i=0
while [ $i -lt $len ]
do
    echo ${arr[$i]}
    i=$((i+1))
done


#iterate with for loop
for i in $arr
do
  echo $i
done

#iterate with splice
 echo ${arr[@]:0:3}

6

ডিক্লেয়ার অ্যারে কার্ন শেলের জন্য কাজ করে না। কর্ন শেলের জন্য নীচের উদাহরণটি ব্যবহার করুন:

promote_sla_chk_lst="cdi xlob"

set -A promote_arry $promote_sla_chk_lst

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

2
আপনার কোডটি আরও সুন্দর দেখানোর জন্য সম্পাদকটিতে কোড হাইলাইটার চেষ্টা করুন।
কবুতর

5
জেনে রাখা ভাল তবে এই প্রশ্নটি বাশ সম্পর্কে।
ব্র্যাড কোচ

1
লোটসা বাগ এখানে। স্পেস সহ তালিকার তালিকা থাকতে পারে না, গ্লোব অক্ষরের সাথে তালিকার তালিকা থাকতে পারে না। for i in ${foo[*]}মূলত সর্বদা ভুল জিনিস - for i in "${foo[@]}"এটি এমন ফর্ম যা মূল তালিকার সীমানা রক্ষা করে এবং গ্লোব সম্প্রসারণকে বাধা দেয়। এবং প্রতিধ্বনিটি হওয়া দরকারecho "$i"
চার্লস ডাফি

4

এটি ব্যবহারকারী 2533809 এর উত্তরের মতো, তবে প্রতিটি ফাইল পৃথক কমান্ড হিসাবে কার্যকর করা হবে।

#!/bin/bash
names="RA
RB
R C
RD"

while read -r line; do
    echo line: "$line"
done <<< "$names"

3

যদি আপনি কর্ন শেল ব্যবহার করে থাকেন তবে সেখানে " সেট -এ ডাটাবেসনাম " আছে, অন্যথায় " ডিক্লার -a ডাটাবেসনাম " আছে

সমস্ত শেলগুলিতে কাজ করে একটি স্ক্রিপ্ট লিখতে,

 set -A databaseName=("db1" "db2" ....) ||
        declare -a databaseName=("db1" "db2" ....)
# now loop 
for dbname in "${arr[@]}"
do
   echo "$dbname"  # or whatever

done

এটি সমস্ত শেল উপর কাজ করা উচিত।


3
না, এটি তা করে না: $ bash --versionজিএনইউ ব্যাশ, সংস্করণ 4.3.33 (0) -রেলিজ (amd64-portbld-freebsd10.0) $ set -A databaseName=("db1" "db2" ....) || declare -a databaseName=("db1" "db2" ....)ব্যাশ: অপ্রত্যাশিত টোকেনের নিকটে সিনট্যাক্স ত্রুটি `('
বার্নি রিটার

2

এটা চেষ্টা কর. এটি কাজ করছে এবং পরীক্ষিত হচ্ছে।

for k in "${array[@]}"
do
    echo $k
done

# For accessing with the echo command: echo ${array[0]}, ${array[1]}

3
এটি আসলে সঠিকভাবে কাজ করে না। চেষ্টা করুন array=( "hello world" ), বাarrray=( "*" ) ; প্রথম ক্ষেত্রে এটি মুদ্রণ করবে helloএবং worldপৃথকভাবে, দ্বিতীয়টিতে এটি ফাইলগুলির একটি তালিকা প্রিন্ট করবে*
চার্লস ডাফি

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

2

প্রতিটি বাশ স্ক্রিপ্ট / সেশনের সম্ভাব্য প্রথম লাইন:

say() { for line in "${@}" ; do printf "%s\n" "${line}" ; done ; }

যেমন:

$ aa=( 7 -4 -e ) ; say "${aa[@]}"
7
-4
-e

বিবেচনা করতে পারে: বিকল্প হিসাবে এখানে echoব্যাখ্যা-e



2

এর জন্য আমার যা দরকার ছিল তা হ'ল এইরকম:

for i in $(the_array); do something; done

এই ক্ষেত্রে:

for i in $(ps -aux | grep vlc  | awk '{ print $2 }'); do kill -9 $i; done

(তাদের নামে ভিএলসি দিয়ে সমস্ত প্রক্রিয়া হত্যা করবে)


1

আমি git pullআপডেটের জন্য আমার প্রকল্পগুলির একটি অ্যারের মধ্য দিয়ে লুপ করছি :

#!/bin/sh
projects="
web
ios
android
"
for project in $projects do
    cd  $HOME/develop/$project && git pull
end

7
যদিও এই কোড স্নিপেট একটি ব্যাখ্যা সহ প্রশ্নটি সমাধান করতে পারে, সত্যিই আপনার পোস্টের মান উন্নত করতে সহায়তা করে। মনে রাখবেন যে আপনি ভবিষ্যতে পাঠকদের জন্য প্রশ্নের উত্তর দিচ্ছেন, এবং সেই লোকেরা আপনার কোড পরামর্শের কারণগুলি জানেন না। আপনার কোডটি ব্যাখ্যামূলক মন্তব্যে ভিড় না করার চেষ্টা করুন, এটি কোড এবং ব্যাখ্যা উভয়ের পাঠযোগ্যতা হ্রাস করে!
কেয়েস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.