我正在编写一个.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
我在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 ...
GGG文件夹不存在。请检查并更新有效的文件夹,然后重试。
#!/bin/bash
folder =“ E:”用于输入“ $ folder” / *做回声“ $ entry”完成