无法理解 Shell 命令 ${PWD/\/$upto\/*//$upto}

无法理解 Shell 命令 ${PWD/\/$upto\/*//$upto}

我看到一个 shell 函数将 dir 改为 $upto。

upto() {
    cd "${PWD/\/$upto\/*//$upto}"
}

但我不明白"${PWD/\/$upto\/*//$upto}"。有人能解释一下吗?

该函数位于Unix & Linux Stack Exchange 问题的答案

答案1

简短的回答?事实证明,你可以对变量进行很多操作,而不仅仅是像插入变量那样简单地插入它们$PWD。引用自bash 参考手册

${parameter/pattern/string}

图案被扩展以产生一个模式,就像文件名扩展一样。范围被扩展,并且最长的匹配是图案其值被替换为字符串。如果图案以 ' ' 开头/,所有匹配图案被替换为字符串。通常只替换第一个匹配项。如果图案以 ' #' 开头,它必须匹配扩展值的开头范围。 如果图案以 ' %' 开头,它必须匹配扩展值的末尾范围。 如果细绳为空,匹配图案被删除,以下/内容图案可以省略。如果范围为 ' @' 或 ' *',则依次对每个位置参数应用替换操作,扩展为结果列表。如果范围@是一个以' '或' '为下标的数组变量*,对数组的每个成员依次进行替换运算,扩展为结果列表。

因此,在这个例子中:${PWD/\/$upto\/*//$upto}

  • 范围PWD
  • 图案/$upto/*(这就是反斜杠的用途,为了保持斜杠在图案避免过早结束模式,并避免开启“替换所有匹配”行为,这通常会从图案以斜线开头)
  • 细绳/$upto

因此,这将查看变量$PWD(shell 将其作为当前目录进行维护),在其中找到第一个被$upto斜杠包围的目录名的位置(因此设置$upto为“ dog”将找不到名为“ dogfood”的目录),然后用“ ”替换该位置和当前目录的其余部分/$upto

相关内容