【问题标题】:What is the meaning of ${0%/*} in a bash script?bash 脚本中 ${0%/*} 的含义是什么?
【发布时间】:2011-09-17 14:58:38
【问题描述】:

我正在尝试理解一个测试脚本,其中包括以下部分:

SCRIPT_PATH=${0%/*}
if [ "$0" != "$SCRIPT_PATH" ] && [ "$SCRIPT_PATH" != "" ]; then 
    cd $SCRIPT_PATH
fi

${0%/*} 代表什么?谢谢

【问题讨论】:

    标签: bash scripting


    【解决方案1】:

    它被称为Parameter Expansion。看看this page 和网站的其余部分。

    ${0%/*} 所做的是,它在从末尾删除字符串/* 后缀后扩展包含在 参数 0(即调用脚本的路径)中的值。

    所以,$0${0} 相同,就像任何其他参数一样,例如。 $1 你可以写成${1}。正如我所说的$0 是特殊的,因为它不是一个真正的 参数,它总是存在并代表脚本的名称。参数扩展在 { } -- 花括号内工作,% 是一种参数扩展。

    %/* 匹配最后一次出现的 / 并删除该字符之后的任何内容(* 表示任何内容)。看看这个简单的例子:

    $ var="foo/bar/baz"
    $ echo "$var"
    foo/bar/baz
    $ echo "${var}"
    foo/bar/baz
    $ echo "${var%/*}"
    foo/bar
    

    【讨论】:

    • 所以,它是dirname($0)
    • 在这个脚本中,是的,它像dirname "$0" 一样工作,但它可能会导致问题。如果你这样调用脚本:bash script 然后${0/*} 不会给你路径,它会返回脚本名,或者如果你指定了完整路径 (/path/to/script) 它不返回任何内容,因此不能保证在所有情况下都能按预期工作。
    • 我正忙着在超级用户上输入一个关于有这个行的问题,我在我的问题中写道,我通常会在谷歌中输入部分代码以获得结果,但似乎我忘记了,但是一旦我在发布之前分解了我的问题并对其进行了分析,我就在 Google 上搜索了 ${0%} 并登陆了这里,你已经向我说清楚了 :)
    • 另见“从脚本本身获取 Bash 脚本的源目录”stackoverflow.com/questions/59895/…
    猜你喜欢
    • 2018-07-19
    • 2012-02-24
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多