我在运行列出目录的基本脚本时遇到问题。
for item in *
do
if [ -d $item ]
then
echo $item
fi
done
结果:
- 列出所有系统文件夹
- 返回错误: for.sh: 4: [: discover: expected operator
- 列出所有文件夹,其名称以小写字母开头
我猜是 -d 发现了一些与首字母小写有关的问题?有人能解释一下为什么会发生这种情况吗?提前谢谢大家。
答案1
某些目录/文件的名称中可能包含空格,这会导致您收到错误。因此请使用引号:
for item in *
do
if [ -d "$item" ]
then
echo "$item"
fi
done
如果你想按字母顺序排列,请使用
for item in *
do
if [ -d "$item" ]
then
echo "$item"
fi
done | sort
举个例子,假设有一个名为 的文件My File
。如果你不使用引号,你会得到(在 bash 扩展之后)
if [ -d My File ]
所以它就像“测试:是My
一个目录吗?做File
”,但File
不是一个有效的test
运算符,因此出现错误。
答案2
下面回显当前目录中的所有目录(但不包含点号,例如.git
)
#!/bin/bash
find . -maxdepth 1 -mindepth 1 -type d | while read Directory; do
echo "$Directory";
done