1. ホーム
  2. bash

bashスクリプトの${0%/*}の意味は何ですか?

2023-09-18 15:54:16

質問

私は、以下のセグメントを含むテストスクリプトを理解しようとしています。

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

は何を意味しているのでしょうか? ${0%/*} は何を表しているのでしょうか?ありがとうございます。

どのように解決するのですか?

これは Parameter Expansion . を見てみましょう。 このページ と他のサイトを見てください。

${0%/*} の中にある値を展開します。 引数 0 (これはスクリプトを呼び出したパスです) に含まれる値を展開し、文字列 /* という文字列を取り除いたものです。

では $0${0} というのは、他の引数と同じで、例えば $1 と書くことができます。 ${1} . ということで $0 は特別なものです。 リアル 引数ではなく、常にそこにあり、スクリプトの名前を表しています。パラメータ展開は { } -- 中括弧、および % はParameter Expansionの一種です。

%/* は、最後に現れる / にマッチし、何かを削除します ( * は何でも意味します)を削除します。この簡単な例を見てみましょう。

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