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。以上示例仅用于说明(您可能认为它有点无意义)但我的问题与此类似。
答案 0 :(得分:3)
相反,你可以
ls -l | while IFS= read -r l ; do echo "This is it: $l" ; done
或做
IFS=\\n
在运行for
之前,但由于可能的副作用,我会避免这种情况。