2011-10-27 318 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