web-dev-qa-db-ja.com

シェルスクリプトの$ {0%/ *}は何をしますか?

これが愚かな質問である場合は申し訳ありませんが、成功せずに検索しました。

2行目は正確に何をしますか?:

#!/bin/sh
cd ${0%/*} || exit 1

最初はシェバンで、2番目はディレクトリを変更しようとしますが、混乱する部分は${0%/*}です。

二行目を説明してもらえますか?

17
Navaro

${0}は、スクリプトの最初の引数、つまりスクリプト名またはパスです。スクリプトをpath/to/script.shとして起動すると、${0}はまさにその文字列path/to/script.shになります。

%/*部分は、${0}の値を変更します。つまり、/の後にファイル名が続くまで、すべての文字を使用します。上記の例では、${0%/*}path/toになります。

シェルで実際の動作を確認できます。

$ x=path/to/script.sh
$ echo "${x%/*}"
path/to

Shは、他の多くの種類の「パラメーター置換」をサポートしています。たとえば、パスではなくファイル名を取得する方法は次のとおりです。

$ echo "${x##*/}"
script.sh

一般に、%%%は接尾辞を取り除き、###は接頭辞を取り除きます。 parameter substitution について詳しく読むことができます。

27