在bash中使用home字符(?)检查目录是否存在失败
发布时间:2020-12-15 18:38:42 所属栏目:安全 来源:网络整理
导读:为什么以下bash检查目录是否失败? if [ ! -d "~/Desktop" ]; then echo "DOES NOT EXIST" exit 1;fi ?/桌面确实存在.顺便说一句,这是在Mac上. 问题在于这种类型的脚本 read -p "Provide the destination directory: " DESTINATIONif [ ! -d $DESTINATION ];
为什么以下bash检查目录是否失败?
if [ ! -d "~/Desktop" ]; then echo "DOES NOT EXIST" exit 1; fi ?/桌面确实存在.顺便说一句,这是在Mac上. 问题在于这种类型的脚本 read -p "Provide the destination directory: " DESTINATION if [ ! -d $DESTINATION ]; then echo "t'$DESTINATION' does not exist." >&2; exit 1; fi
贾斯汀在他关于量子答案的第一个评论中澄清了他的问题.他正在使用read(或其他动态方法)读取一行文本,并希望扩展代字号.
问题变成“你如何对变量的内容进行波浪扩展?” 一般方法是使用eval,但它带有一些重要的警告,即变量中的空格和输出重定向(>).以下似乎对我有用: read -p "Provide the destination directory: " DESTINATION if [ ! -d "`eval echo ${DESTINATION//>}`" ]; then echo "'$DESTINATION' does not exist." >&2; exit 1; fi 尝试使用以下每个输入: ~ ~/existing_dir ~/existing dir with spaces ~/nonexistant_dir ~/nonexistant dir with spaces ~/string containing > redirection ~/string containing > redirection > again and >> again 说明 > ${mypath //>}剥离>在评估期间可能破坏文件的字符. 作为对此的补充,您可以通过添加-e选项来改进UX以进行读取: read -p "Provide the destination directory: " -e DESTINATION 现在,当用户键入波浪号和点击选项卡时,它将展开.但是,这种方法并不能取代上面的eval方法,因为扩展仅在用户点击选项卡时才会发生.如果他只输入?/ foo并命中输入,它将保持为波浪号. 也可以看看: > https://stackoverflow.com/questions/3963716/how-to-manually-expand-a-special-variable-ex-tilde-in-bash (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- angular – 使用TypeScript以编程方式检查Ionic 2单选按钮
- c# – 无法在docker中构建引用PCL的ASP.NET Core应用程序
- angularjs – 测试角度mousedown,mousemove,mouseup
- 在Angular2上创建小项目,然后将它们作为一个项目加入
- angular2路由 – 浏览到不刷新组件的同一路由?
- 将当前作用域传递给AngularJS服务
- WebService大讲堂之Axis2(1):用POJO实现0配置的WebServi
- 2013.03.13 bootstrap 模态框使用
- 如何使用AngularJS $资源自定义操作?
- 《数据结构》实验三:栈和队列实验