我正在编写一个.sh文件,以逐个打印文件名。我已经在Windows 10中安装了ubuntu,并使用Windows命令提示符执行以下代码。它返回“ E:/ Official / Backups / GGG / *”,而不是其中的文件名。我还通过使用记事本++将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
答案 0 :(得分:0)
GGG文件夹不存在。请检查并更新有效文件夹,然后重试。
#!/bin/bash
folder =“ E:” 用于输入“ $ folder” / * 做 回声“ $ entry” 完成
答案 1 :(得分:0)
我在WSL中的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 ...