92

I am trying to understand a test script, which includes the following segment:

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

What does the ${0%/*} stand for? Thanks

1 Answer 1

144

It is called Parameter Expansion. Take a look at this page and the rest of the site.

What ${0%/*} does is, it expands the value contained within the argument 0 (which is the path that called the script) after removing the string /* suffix from the end of it.

So, $0 is the same as ${0} which is like any other argument, eg. $1 which you can write as ${1}. As I said $0 is special, as it's not a real argument, it's always there and represents name of script. Parameter Expansion works within the { } -- curly braces, and % is one type of Parameter Expansion.

%/* matches the last occurrence of / and removes anything (* means anything) after that character. Take a look at this simple example:

$ var="foo/bar/baz"
$ echo "$var"
foo/bar/baz
$ echo "${var}"
foo/bar/baz
$ echo "${var%/*}"
foo/bar
Sign up to request clarification or add additional context in comments.

5 Comments

so, it's aa the dirname($0)
in this script, yes, it works like dirname "$0" but it could cause problems. If you called the script like this: bash script then ${0/*} doesn't give you the path, it returns the scriptname, or if you specified full path (/path/to/script) it returns nothing, so it's not guaranteed to work as expected in all situations.
I was busy typing a question on superuser about a line that has this, I wrote in my question that I'd usually type parts of the code into google to get a result but seemingly I forgot that but as soon as I broke up my question and analysed it before posting, I googled just ${0%} and landed here, you have made it clear for me :)
See also "Get the source directory of a Bash script from within the script itself" stackoverflow.com/questions/59895/…
echo ${var%%/*} --> foo

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.