bash - 在 bash 脚本中传递“~”时找不到“~”。有什么区别?
问题描述
我在使用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
""
解决方案
推荐阅读
- ionic-framework - 在 ionic 3 中添加离开或留在页面警报?
- android - Android Studio 构建错误:执行任务':app.processDebugResources'
- ios - Firebase InstanceId 未解析的标识符 swift4
- powershell - ? 添加到 String Powershell
- wordpress - HTML 标记未正确呈现 - 读取文本文件 - wrpdress
- html - 如何在彼此下方对齐两个div?(顶部 div 被减半)
- c# - 与 C# 中分组的 KeyValuePair 列表中的公共值相交
- docker - ASP.NET Core Docker 环境变量(如果应用迁移)
- css - 当可拖动的引导模式对话框被拖动到浏览器窗口的最左侧或最顶部时,滚动条不出现
- jsf - JSF - 复合触发中的 ajax 调用仅一次