Bash .sh文件返回的是文件路径而不是文件名
我正在编写一个.sh文件来逐个打印文件名。我已经在Windows10中安装了ubuntu,并使用windows命令提示符执行以下代码。它返回的是“E:/Official/Backups/GGG/*”而不是其中的文件名。我还使用notepad++将EOL转换更改为Unix(LF)。请帮忙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
#!/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…
@ThangarajJcd/your/dir
e> 对于*中的条目,或使用basename“$entry”
。搜索它——这应该是重复的。