2011-10-27 222 views
1

我寫這篇bash腳本:字符串連接

count=0 
result 

for d in `ls -1 $IMAGE_DIR | egrep "jpg$"` 
do 

    if (((count % 4) == 0)); then 
       result="abc $d" 

       if ((count > 0)); then 
        echo "$result;" 
       fi 

     else 
      result="$result $d" 
     fi 

     ((count++)) 

done 

if (((count % 4) == 0)); then 
    echo $result 
fi 

腳本是concate部分字符串轉換爲字符串當值除以4,它應該是大於0

在IMAGE_DIR,我有8個圖像,

我得到的輸出是這樣的:

abc et004.jpg 
abc et008.jpg 

但我希望有:

abc et001.jpg et002.jpg et003.jpg et004.jpg; 
abc et005.jpg et006.jpg et007.jpg et008.jpg; 

我該如何解決這個問題?

+0

也許[代碼審查(http://codereview.stackexchange.com)將是一個更好的地方要問這樣的問題? –

+1

作爲一個方面說明,你應該避免使用反引號太舒服,因爲它們不會嵌套。只需使用'$(...)'代替。如果你的JPG文件帶有空格(比如'ls | grep | while read d; do ...'),你的for循環將會失敗。 – bitmask

回答

2

像這樣的事情?

count=0 

find $IMAGE_DIR -name "*.jpg" | 
while read f; do 
     if (((count % 4) == 0)); then 
       result="abc $f" 

       if ((count > 0)); then 
         echo $result 
       fi 

     else 
       result="$result $d" 
     fi 

     ((count++)) 
done 
+0

好點!變量計數需要遞增:) –

+0

謝謝,這是有希望的。我想我應該在循環之外聲明結果吧?我已經更新了我的代碼,但是我想我錯過了一些東西來連接字符串......我仍然在發現錯誤。你有什麼想法嗎? – olidev

+0

沒關係,我的解決方案現在正在工作,我應該把回聲擺在面前。非常感謝! – olidev

7

=操作員必須始終沒有空格寫它周圍:

result="$result $d" 

(幾乎是最重要的shell編程正常節目不同的是,在地方事務的空白,你就別指望了。這是其中之一)

1

是這樣的(未經測試,當然):

count=0 result= 

for d in "$IMAGE_DIR"/*jpg; do 
    ((++count % 4 == 0)) && 
    result="abc $d" 
    ((count > 0)) && 
    printf '%s\n' "$result" || 
     result+=$d 
done