包含空格的文件名的Shell脚本问题

tgo*_*eil 4 linux bash shell filenames command-line

我知道处理文件名中的空格的一种方法是用单引号括起文件名:"'".

为什么以下代码调用"echo.sh"对包含带空格的文件名的目录起作用,但程序"ls.sh"不起作用,唯一的区别是'echo'被'ls'替换?

echo.sh

#!/bin/sh
for f in *
do
echo "'$f'"
done
Run Code Online (Sandbox Code Playgroud)

主要生产:
'ABC'
'高清'
'echo.sh'
'ls.sh'

但是,"ls.sh"失败了:

#!/bin/sh
for f in *
do
ls "'$f'"
done
Run Code Online (Sandbox Code Playgroud)

产生:
ls:无法访问'ab c':没有这样的文件或目录
ls:无法访问'de f':没有这样的文件或目录
ls:无法访问'echo.sh':没有这样的文件或目录
ls:无法访问' ls.sh':没有这样的文件或目录

小智 6

你实际上是在添加多余的"'"(你的echo调用显示)

试试这个:

#!/bin/sh
for f in *
do
ls "$f"
done
Run Code Online (Sandbox Code Playgroud)