我尝试了以下命令
for i in `ls`; do ls $i; done
并获得以下输出:
ls: a.out: No such file or directory
ls: c: No such file or directory
ls: contest: No such file or directory
ls: cpp: No such file or directory
ls: java: No such file or directory
ls: : No such file or directory
由于文件列表也是使用ls
获得的,因此令人困惑。当我尝试在od
上echo
时,我看到以下内容:
0000000 033 133 060 155 033 133 060 061 073 063 062 155 141 056 157 165
033 [ 0 m 033 [ 0 1 ; 3 2 m a . o u
0000020 164 033 133 060 155 012
t 033 [ 0 m \n
0000026
0000000 033 133 060 061 073 063 064 155 143 033 133 060 155 012
033 [ 0 1 ; 3 4 m c 033 [ 0 m \n
0000016
0000000 033 133 060 061 073 063 064 155 143 157 156 164 145 163 164 033
033 [ 0 1 ; 3 4 m c o n t e s t 033
0000020 133 060 155 012
[ 0 m \n
0000024
0000000 033 133 060 061 073 063 064 155 143 160 160 033 133 060 155 012
033 [ 0 1 ; 3 4 m c p p 033 [ 0 m \n
0000020
0000000 033 133 060 155 146 151 154 145 056 164 170 164 033 133 060 155
033 [ 0 m f i l e . t x t 033 [ 0 m
0000020 012
\n
0000021
0000000 033 133 060 061 073 063 064 155 152 141 166 141 033 133 060 155
033 [ 0 1 ; 3 4 m j a v a 033 [ 0 m
0000020 012
\n
0000021
0000000 033 133 155 012
033 [ m \n
0000004
这些“033 [0 m”字符代表什么?我该如何避免它们?它们是导致这个问题的原因吗?
请帮忙。
谢谢, Karthick S。
答案 0 :(得分:4)
您不需要`ls`
或$(ls)
。您可以改用*
。通过这种方式,您可以避免花哨的彩色输出,同时保持代码的便携性,可读性和紧凑性。
答案 1 :(得分:3)
这是Bash Pitfalls中的第一名
切勿使用ls
作为另一个命令的输入......
答案 2 :(得分:2)
“033 [0 m”字符是用于着色终端输出的转义码。请尝试使用此代码:
for file in $(unset LS_COLORS \ls);
do
ls "$file";
done
答案 3 :(得分:0)
或者
for file in $(ls -1 -Q --quoting-style=shell --color=never);
do
ls "$file";
done