%
のとき パターン ${variable%substring}
で使用されます variable
のコンテンツを返します substring
の最短出現 variable
の後ろから削除 .
この関数はワイルドカード パターンをサポートしています。そのため、0 個以上の文字の代わりに星 (アスタリスク) を使用できます。
これは Bash 固有のものであることに注意してください。他の Linux シェルには、必ずしもこの機能が含まれているわけではありません。
Bash での文字列操作について詳しく知りたい場合は、このページを読むことを強くお勧めします。他の便利な機能の中で、たとえば %%
の機能について説明しています してください:)
編集:パターン $((variable%number))
で使用されている場合に言及するのを忘れていました または $((variable1%$variable2))
%
文字はモジュロ演算子として機能します。 DavidPostill の回答には、より具体的なドキュメントへのリンクがあります。
%
のとき 異なるコンテキストで使用されている場合、通常の文字のみとして認識されるべきです。
<ブロック引用>
Bash リファレンス マニュアル:シェル パラメータの展開
${parameter%word}
${parameter%%word}
単語 ファイル名の展開と同じように、パターンを生成するように展開されます。パターンが parameter の展開された値の末尾部分と一致する場合 の場合、展開の結果は parameter の値です 最短の一致パターン (‘%’
ケース) または最長一致パターン (‘%%’
ケース)を削除しました。 If パラメータ ‘@’
です または ‘*’,
パターン除去操作は各位置パラメーターに順番に適用され、展開は結果リストです。 If パラメータ ‘@’
で添字付けされた配列変数です または ‘*’,
パターン除去操作は配列の各メンバーに順番に適用され、展開は結果のリストです。
実験の結果、文字列が中かっこ (中かっこ) で囲まれている場合、% の後の一致は破棄されることがわかりました。
説明するには:
touch abcd # Create file abcd
for file in ab*; do
echo $file # echoes the filename
echo $file% # echoes the filename plus "%"
echo ${file%} # echoes the filename
echo "${file%}" # echoes the filename
echo
echo "${file%c*}" # Discard anything after % matching c*
echo "${file%*}" # * is not greedy
echo ${file%c*} # Without quotes works too
echo "${file%c}" # No match after %, no effect
echo $file%c* # Without {} fails
done
出力は次のとおりです:
abcd
abcd%
abcd
abcd
ab
abcd
ab
abcd
abcd%c*