Komut satırında for döngüsü nasıl yapılır?


22

Basit bir alalım for loop

#!/bin/bash

for i in `seq 1 10`;
do
    echo $i
done

Bash komut dosyalarındaki AFAIK noktalı virgül, kabuğun geçerli komutu eşzamanlı olarak yürütmesini ve sonra bir sonrakine gitmesini sağlar. Enter tuşuna basmak, aşağıdaki komutu girmenize izin vermediği ve ara belleği derhal temizleyebileceği dışında, kelimenin tam anlamıyla aynıdır.

Öyleyse neden kabuk aşağıdaki satırı yorumlayamıyor?

for i in `seq 1 10`; do; echo $i; done

bu for loopgerçekten nasıl çalışıyor?

Yanıtlar:


16

Manuel sayfadaki bir fordöngünün sözdizimibash

for name [ [ in [ word ... ] ] ; ] do list ; done

Noktalı virgül, el ile değiştirilen bashsayfadaki başka bir yerde belirtildiği gibi satır başı ile değiştirilebilir : "Komutları sınırlamak için noktalı virgül yerine listede bir veya daha fazla yeni satırdan oluşan bir sıra görünebilir."

Ancak bunun tersi doğru değildir; yeni satırları keyfi olarak noktalı virgülle değiştiremezsiniz. Yukarıdaki sözdizimi kurallarına uyduğunuz ve aşağıdakilerden sonra fazladan bir noktalı virgül eklemediğiniz sürece çok satırlı komut dosyanız tek bir satıra dönüştürülebilir do:

for i in `seq 1 10`; do echo $i; done

2
Son komut dosyası yanlıştır, @ dr01'in işaret ettiği gibi, noktalı virgülü kaldırmanız gerekir do.
Jake

1
@jake, bu da sonra noktalı virgül kaldırmanız gerektiğini söylüyor do. Ek olarak, bu cevap neden noktalı virgül `` do '' dan sonra kaldırmanız gerektiğini açıklar .
user4556274

$iBir dosya adının parçası olması gerekiyorsa ne olur ? Çift tırnak lazım mı?
İsimsiz

18

Sonra noktalı virgül dobir hatadır ve orada olmamalıdır.

Aşağıdakiler doğru çalışır:

for i in `seq 1 10`; do echo $i; done 
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.