![列出目录的基本脚本([:发现:意外操作符)](https://linux22.com/image/968676/%E5%88%97%E5%87%BA%E7%9B%AE%E5%BD%95%E7%9A%84%E5%9F%BA%E6%9C%AC%E8%84%9A%E6%9C%AC%EF%BC%88%5B%EF%BC%9A%E5%8F%91%E7%8E%B0%EF%BC%9A%E6%84%8F%E5%A4%96%E6%93%8D%E4%BD%9C%E7%AC%A6%EF%BC%89.png)
我在运行列出目录的基本脚本时遇到问题。
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