GNU/Linux >> Belajar Linux >  >> Linux

Counter increment di Bash loop tidak berfungsi

Pertama, Anda tidak menambah penghitung. Mengubah COUNTER=$((COUNTER)) ke dalam COUNTER=$((COUNTER + 1)) atau COUNTER=$[COUNTER + 1] akan meningkatkannya.

Kedua, lebih sulit untuk menyebarkan kembali variabel subkulit ke penerima seperti yang Anda duga. Variabel dalam subkulit tidak tersedia di luar subkulit. Ini adalah variabel lokal untuk proses anak.

Salah satu cara untuk mengatasinya adalah menggunakan file temp untuk menyimpan nilai antara:

TEMPFILE=/tmp/$$.tmp
echo 0 > $TEMPFILE

# Loop goes here
  # Fetch the value and increase it
  COUNTER=$[$(cat $TEMPFILE) + 1]

  # Store the new value
  echo $COUNTER > $TEMPFILE

# Loop done, script done, delete the file
unlink $TEMPFILE

COUNTER=1
while [ Your != "done" ]
do
     echo " $COUNTER "
     COUNTER=$[$COUNTER +1]
done

BASH TERUJI:Centos, SuSE, RH


COUNTER=$((COUNTER+1)) 

adalah konstruksi yang cukup kikuk dalam pemrograman modern.

(( COUNTER++ ))

terlihat lebih "modern". Anda juga dapat menggunakan

let COUNTER++

jika menurut Anda itu meningkatkan keterbacaan. Kadang-kadang, Bash memberikan terlalu banyak cara untuk melakukan sesuatu - saya kira filosofi Perl - ketika mungkin Python "hanya ada satu cara yang benar untuk melakukannya" mungkin lebih tepat. Itu pernyataan yang bisa diperdebatkan jika pernah ada! Bagaimanapun, saya akan menyarankan tujuannya (dalam hal ini) bukan hanya untuk menambah variabel tetapi (aturan umum) untuk juga menulis kode yang dapat dipahami dan didukung orang lain. Kesesuaian sangat membantu untuk mencapai hal itu.

HTH


Linux
  1. Variabel Curl Outfile Tidak Bekerja Dalam Skrip Bash?

  2. R 3.5.0 Tidak Bekerja Di Ubuntu 18.04?

  3. Contoh Bash untuk loop

  1. linux limit.conf tidak berfungsi?

  2. Perintah Linux 'akan' tidak berfungsi

  3. Perintah Conda bekerja di command prompt tetapi tidak di skrip bash

  1. Cara menulis loop di Bash

  2. Bash Seri Pemula #8:Loop di Bash

  3. gema karakter baris baru tidak berfungsi di bash