bash 脚本中 $0%/* 的含义是啥?

Posted

技术标签:

【中文标题】bash 脚本中 $0%/* 的含义是啥?【英文标题】: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%/* 代表什么?谢谢

【问题讨论】:

【参考方案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 脚本的源目录”***.com/questions/59895/…

以上是关于bash 脚本中 $0%/* 的含义是啥?的主要内容,如果未能解决你的问题,请参考以下文章

linux shell脚本中的开头#!/bin/bash的含义

perf 脚本输出的含义是啥?

shell脚本首行#!/bin/sh和#!/bin/bash的含义与区别

Linux Shell Bash 带有特殊含义的退出码

linux中gnu的含义是啥?

这个条件在javascript中的含义是啥?