BASHを使用して変数の値から先頭と末尾の空白(SPC)を削除しようとすると、記述されているとおりに動作しないと思います。BASHではパターン置換のために特別なスペースがありますか?
% val=" a ";echo "|${val}|${val## }|"
| a | a |
% val=" a ";echo "|${val}|${val%% }|"
| a | a |
その後、私は何を削除していないようだどのパターンマッチングを試してみました(彼らはまた、繰り返しに空白を削除する必要があります。私は、最長のパターンを削除するべき${var%% }
と${var## }
で始めたが、それだけで1つのブランクが削除されたようです 値の開始または終了):
% val=" a ";echo "|${val}|${val//# }|"
| a | a |
% val=" a ";echo "|${val}|${val//% }|"
| a | a |
私はいくつかの簡単な間違いを感じますが、私は目の前に座っているようです:なぜこれは機能しませんか?
(私はすでにこれらの答えを訪問しましたが、彼らは "私の解決策" が含まれていない:How to remove space from string? How to trim whitespace from a Bash variable?、 )
1つのスペースに一致しています。一致した文字列は、変数の先頭または末尾から開始または終了する必要があります。 '$ {val ##} ''や '$ {val ## *}''を試してみてください。あなたの例でわかるように、単一のスペースを削除しています。 – 123
@ 123:実際に私もそれを試みました。しかし、それはすべてを削除します! 'val =" a "; echo" | $ {val} | $ {val ## *} | "' outputs '| a || '(そして単一の'# 'は' | a | a | 'を生成します)。 ( 'val =" a "; echo" | $ {val} | $ {val ##} | "'もうまくいきません: '| a | a |') 私は尋ねる前にすべて試しました。質問のタイトル;-) –
ええ、最善の策は以下の答えのようにextglobを使うことです。 – 123