【发布时间】:2019-10-08 10:40:12
【问题描述】:
为什么下面的代码在 ksh 和 bash 中会产生不同的输出
p="folderA/folderB/folderC"
echo ${p%%+([^/])}
echo ${p#${p%%+([^/])}}
ksh 输出:
folderA/folderB/
folderC
bash 输出:
folderA/folderB/folderC
我特别困惑,因为我使用了bash documentation 来创建这个参数扩展。
我想提取最后一个斜杠后的文件夹名称。我发现了另一种在 ksh 和 bash 中工作的方法:
echo ${p##*/}
但我想了解为什么第一种方法不起作用。
【问题讨论】:
-
你的 bash 版本是什么?我在我的 bash 5.0.11
the folder name after the last slash上得到了正确的输出 - 使用basename是最便携的。最后一个斜杠之前的部分使用dirname。 -
我得到了一行 bash (4.4.20)、zsh 和 dash。两行 ksh93。
标签: bash shell parameters ksh expansion