在脚本中,我进入了它$0的可能相对路径。为了将其转换为绝对值,我发现了这个我不明白的解决方案:
abspath=$(cd ${0%/*} && echo $PWD/${0##*/})
Run Code Online (Sandbox Code Playgroud)
我的问题是${0%/*}and里面的魔法${0##*/}。看起来前者提取目录名,后者提取文件名,我只是不明白如何。
l0b*_*0b0 10
肖恩有最简单的解决方案:readlink -f $0. 如果你想绝对确定处理奇怪的文件名,你可以使用这个:
absolute_path_x="$(readlink -fn -- "$0"; echo x)"
absolute_path="${absolute_path_x%x}"
Run Code Online (Sandbox Code Playgroud)
定义:
${string%substring}$substring从 的末尾 删除最短的匹配项$string。
${string##substring}$substring从 的开头删除最长的匹配项$string。
你的例子:
abspath=$(cd ${0%/*} && echo $PWD/${0##*/})
Run Code Online (Sandbox Code Playgroud)
${0%/*} 删除最后一个斜杠后的所有内容,为您提供脚本的目录名称(可能是相对路径)。
${0##*/} 删除最后一个斜杠之前的所有内容,只为您提供脚本的名称。
因此,此命令更改为脚本目录并将当前工作目录(由 给出$PWD)和脚本名称连接起来,为您提供绝对路径。
要查看发生了什么,请尝试:
echo ${0%/*}
echo ${0##*/}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16646 次 |
| 最近记录: |