これが愚かな質問である場合は申し訳ありませんが、成功せずに検索しました。
2行目は正確に何をしますか?:
#!/bin/sh
cd ${0%/*} || exit 1
最初はシェバンで、2番目はディレクトリを変更しようとしますが、混乱する部分は${0%/*}
です。
二行目を説明してもらえますか?
${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 について詳しく読むことができます。