我在使用 ls
确定某个路径是否是文件夹时遇到了一个奇怪的问题。我正在尝试验证用户输入字符串是否是有效目录。我正在使用 ls -ld
检查输入,然后将输出的第一个字符与 d
进行比较。
我认为下面的代码会起作用,但它不会。其他有效路径(不以 ~
开头)作为字符串工作。
#!/bin/bash
is_valid_dir() {
echo "input=$1"
ls_result=$(ls -ld $1)
echo "$ls_result"
if [[ ${ls_result:0:1} == d ]]; then
echo "input is a directory"
return 0
else
echo "input is not a directory"
return 1
fi
}
is_valid_dir /home/simon # Works
is_valid_dir . # Works
is_valid_dir ../. # Works
is_valid_dir ~ # Works
is_valid_dir ~/.. # Works
is_valid_dir "/home/simon" # Works
is_valid_dir "." # Works
is_valid_dir "../." # Works
is_valid_dir "~" # Doesnt Work!
is_valid_dir "~/.." # Doesnt Work!
有人能告诉我为什么在提供 ~
时提供相对于 ls
的路径会混淆 ""
吗?