找到当前路径的深度

SFb*_*007 1 unix linux bash shell fish

如何编写shell脚本来查找当前路径的深度?

假设我在:

/home/user/test/test1/test2/test3
Run Code Online (Sandbox Code Playgroud)

它应该返回6.

Ben*_* W. 6

使用shell参数扩展,没有外部命令:

$ var=${PWD//[!\/]}
$ echo ${#var}
6
Run Code Online (Sandbox Code Playgroud)

第一个扩展删除所有不是的字符/; 第二个打印长度var.


有关POSIX shell或Bash支持的详细说明(括号中的链接转到POSIX标准或Bash手册中的相应部分):

  • $PWD包含当前工作目录的路径.(sh/Bash)
  • 所述膨胀取代的第一次出现在的膨胀用.(Bash)${parameter/pattern/string}patternparameterstring
    • 如果第一个斜杠加倍(如我们的情况),则替换所有出现的情况.
    • 如果string为空,则后面的斜杠pattern是可选的(如我们的情况).
  • 该模式[!\/]是一个括号表达式,代表"斜杠以外的任何字符".(sh/Bash)
    • 斜杠必须被转义,\/或者被解释为结束模式.
    • !如在括号表达式的第一个字符否定表达:任何字符其他比在表达的那些匹配的模式.POSIX sh需要支持,!并说使用的行为^是未定义的; Bash支持!^.请注意,这不是正则表达式中所见的括号表达式,只有^有效.
  • ${#parameter}扩展到.的长度parameter.(sh/Bash)

  • @GillesQuenot POSIX要求在外壳模式括号表达式中使用负号“!”,而对“ ^”的行为则未定义;Bash同时支持`!`和`^`。我将添加更多信息。 (2认同)

rid*_*ish 5

鱼的简单方法:

count (string split / $PWD)
Run Code Online (Sandbox Code Playgroud)