假设我已经将路径存储在变量中:
tmp=/home/abc/xyz
所以我现在想要的是向后退一步并将其存储在变量中
tmp2=/home/abc
请让我知道如何在没有任何错误的情况下实现这一目标
答案1
听起来像是一份工作dirname
。文件/目录不必存在,它只是切断最后一部分,所以你永远不会得到错误。因为/
它回来了/
。
tmp2="$(dirname -- "$tmp")"
答案2
替代dirname
。这要求路径不为空且不是相对路径。
tmp2=$(set -f; IFS=/; set -- $tmp; echo "/${*:1:$# ? $# - 1: 0}")
不管怎样,我不喜欢他们使用 subshell。因此,dirname
将结果分配给全局变量的函数版本__
会更好,但会更加冗长。