“for loop”和$()组合限制

时间:2013-10-27 15:43:55

标签: bash shell

好吧,我正在开发一个不同类型的脚本,但问题归结为这样的事情:假设以下“for循环”:

for i in $(ls -l); do echo $i; done

问题是“for循环”按空格分隔值,因此每个“i”等于'ls -l'中用空格分隔的每个单词。因此输出是这样的:

  
    

         

24

         

drwxrwxr-X。

         

2

         

詹姆斯

         

詹姆斯

         

4096

         

         

26

         

16时56分

         

BG

         

。     。     

  

但我希望在每个刺激变量“i”等于'ls -a'的整个行而不是每个单词。换句话说,“i”等于整行

"drwxrwxr-x.  2 james james 4096 Oct 26 16:56 bg" 
而不是刺激每个单词。我已经尝试过很多变通办法,但是没有一个变得有效,有点吓坏了我。

有没有办法告诉“for loop”分隔换行而不是空格

P.S。以上示例仅用于说明(您可能认为它有点无意义)但我的问题与此类似。

1 个答案:

答案 0 :(得分:3)

相反,你可以

ls -l | while IFS= read -r l ; do echo "This is it: $l" ; done

或做

IFS=\\n

在运行for之前,但由于可能的副作用,我会避免这种情况。