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的含义