在bash中使用"ls"for循环是否安全

Mah*_*aal 2 linux bash

我正在使用它来遍历/ home目录中的文件夹

for FOLDERNAME in `\ls -1 /home/`
Run Code Online (Sandbox Code Playgroud)

我想知道它是否安全

Chr*_*röm 6

如果您想要所有子目录/home,请使用

(   # run in subshell so "shopt -s dotglob" doesn't affect rest of script
    shopt -s dotglob
    for DIR in /home/*/; do
       DIRNAME=`basename "$DIR"`

       # do whatever with "$DIR" or "$DIRNAME"
       echo -n "$DIRNAME"|od -t cz
    done
)
Run Code Online (Sandbox Code Playgroud)

请注意尾部斜杠和引用的变量.

编辑:

使用目录和文件

mkdir /home/..abc
mkdir /home/.abc
mkdir /home/$'a\nc'
mkdir /home/'a?c'
mkdir /home/abc
mkdir /home/'foo bar'
touch /home/test
Run Code Online (Sandbox Code Playgroud)

这给了我输出

0000000   .   .   a   b   c                                              >..abc<
0000005
0000000   .   a   b   c                                                  >.abc<
0000004
0000000   a  \n   c                                                      >a.c<
0000003
0000000   a   ?   c                                                      >a?c<
0000003
0000000   a   b   c                                                      >abc<
0000003
0000000   f   o   o       b   a   r                                      >foo bar<
0000007
Run Code Online (Sandbox Code Playgroud)

哪里

ls -1 -F -b -A /home
Run Code Online (Sandbox Code Playgroud)

给了我输出

..abc/
.abc/
a\nc/
a?c/
abc/
foo bar/
test
Run Code Online (Sandbox Code Playgroud)

(test是一个文件)

  • @user:不,它不会,我明确地测试了,这就是我引用变量的原因.Bash对于它的全球化非常聪明. (3认同)
  • 它适用于我,我将使用示例输出编辑答案. (2认同)