在脚本中,我进入了它$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 次 |
最近记录: |