Bash路径变量使用?导致’没有这样的文件或目录’
发布时间:2020-12-15 19:00:59 所属栏目:安全 来源:网络整理
导读:如果我这样做: ls ~/Dev/Project/Assets/_Core/ 我得到一个超级duper目录列表!好极了!但如果我这样做: assetsPath=$(head -n 1 .config | perl -ne 'print if s/^assets=(.*)/1/g')echo $assetsPathls $assetsPath 我明白了: ~/Dev/Project/Assets/_Co
如果我这样做:
ls ~/Dev/Project/Assets/_Core/ 我得到一个超级duper目录列表!好极了!但如果我这样做: assetsPath=$(head -n 1 .config | perl -ne 'print if s/^assets=(.*)/1/g') echo $assetsPath ls $assetsPath 我明白了: ~/Dev/Project/Assets/_Core/ # this was the variable value from the echo ls: ~/Dev/Project/Assets/_Core/: No such file or directory 我甚至尝试使用${assetsPath},但这也不起作用?
作为部分解决方案:
assetsPath=${assetsPath//'~'/$HOME} 这没有解决的是?用户名扩展;如果你的assetsPath使用它,那么你需要更多的逻辑(我认为我已经在一个单独的StackOverflow答案中添加了;寻找问题). 它也没有解决?处于非领先位置,不应该扩展.要处理两个极端情况,我要去self-plagarize a bit: expandPath() { local path local -a pathElements resultPathElements IFS=':' read -r -a pathElements <<<"$1" : "${pathElements[@]}" for path in "${pathElements[@]}"; do : "$path" case $path in "~+"/*) path=$PWD/${path#"~+/"} ;; "~-"/*) path=$OLDPWD/${path#"~-/"} ;; "~"/*) path=$HOME/${path#"~/"} ;; "~"*) username=${path%%/*} username=${username#"~"} IFS=: read _ _ _ _ _ homedir _ < <(getent passwd "$username") if [[ $path = */* ]]; then path=${homedir}/${path#*/} else path=$homedir fi ;; esac resultPathElements+=( "$path" ) done local result printf -v result '%s:' "${resultPathElements[@]}" printf '%sn' "${result%:}" } …然后: assetsPath=$(expandPath "$assetsPath") (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- angularjs – 如何获取角度$interval的状态 – 检查间隔是否
- twitter-bootstrap – 响应iframe使用Bootstrap
- modal-dialog – bootstrap jquery show.bs.modal事件不会触
- twitter-bootstrap – 使用bootstrap的Angular 4下拉菜单
- 关于Shell你想知道的都在这儿
- Bash线程:等待所有工作线程完成不起作用?
- angular过滤器
- bootstrap nav nav-tabs 选项卡 的使用实例
- twitter-bootstrap – Bootstrap 3按钮组 – 如何使它们链接
- 在Angular应用程序之间共享代码