Bash .sh文件返回的是文件路径而不是文件名

Bash .sh文件返回的是文件路径而不是文件名,bash,glob,windows-subsystem-for-linux,Bash,Glob,Windows Subsystem For Linux,我正在编写一个.sh文件来逐个打印文件名。我已经在Windows10中安装了ubuntu,并使用windows命令提示符执行以下代码。它返回的是“E:/Official/Backups/GGG/*”而不是其中的文件名。我还使用notepad++将EOL转换更改为Unix(LF)。请帮忙 #!/bin/bash folder="E:/Official/Backups/GGG" for entry in "$folder"/* do echo "$entry" done 运行脚本输出: $ bas

我正在编写一个.sh文件来逐个打印文件名。我已经在Windows10中安装了ubuntu,并使用windows命令提示符执行以下代码。它返回的是“E:/Official/Backups/GGG/*”而不是其中的文件名。我还使用notepad++将EOL转换更改为Unix(LF)。请帮忙

#!/bin/bash
folder="E:/Official/Backups/GGG"
for entry in "$folder"/*
do
echo "$entry"
done
运行脚本输出:

$ bash test1.sh
E:/Official/Backups/GGG/*
回波输出$-

himBHs
ls-ld E的输出:/Official/Backups/GGG

ls: cannot access 'E:/Official/Backups/GGG': No such file or directory

GGG文件夹不存在。请检查并更新有效文件夹,然后重试

#!/bin/bash
folder=“E:” 对于“$folder”中的条目/* 做 回显“$entry”
已完成

WSL中的My bash无法识别windows路径。如果我想访问
E:\Official\Backups\GGG
,我必须使用
/mnt/E/Official/Backups/GGG

我想,你的WSL聚会也是如此。因此,“路径”
E:/Official/Backups/GGG
只是一个不存在的目录,您观察到的行为是意料之中的。使用
bash
的默认设置,如果目录不存在或为空,则
*
将作为文本留在那里。例如:

$ echo /dir/that/doesnt/exist/*
/dir/that/doesnt/exist/*
$ echo /dir/that/exists/but/is/empty/*
/dir/that/exists/but/is/empty/*
$ echo /dir/*
/dir/file1 /dir/file2 /dir/file3 ...

请将
echo$-
的输出添加到您的问题中。这不是获取目录中的文件名。请将
ls-ld E:/Official/Backups/GGG
的输出添加到您的问题中。出于兴趣:是
E:
只是一个具有不寻常名称的linux目录/链接,还是您的WSL bash识别实际的windows路径(使用
/
而不是
\
)?如果是这样,您是如何做到的?不管怎样,我认为您的问题是您使用windows路径时没有考虑它;请参阅我的答案。是的。正如您提到的,它在使用“/mnt/e/Official/Backups/GGG”后工作正常路径。但返回的是路径和文件名/mnt/e/Official/Backups/GGG/CIH Build script.sql。如何单独获取文件名?哼哼。最后一个示例可能呈现:
/dir/that/does/exist/and/is/not/empty/file1/dir/that/does/exist/and/is/not/empty/file3…
@ThangarajJ
cd/your/dir
e> 对于*中的条目,或使用
basename“$entry”
。搜索它——这应该是重复的。