「du」コマンドの出力から最初の単語(サイズ)を抽出するために$ {xx%% *}を使用できないのはなぜですか?

「du」コマンドの出力から最初の単語(サイズ)を抽出するために$ {xx%% *}を使用できないのはなぜですか?

私はスクリプトを作成し、ディレクトリサイズを抽出したいと思います。そこで私は理解していない奇妙な効果を見つけました。

私は "du"コマンドを使用しました:

> x=$(du mydir)
> echo $x
8192 mydir

今まではそんなに良くなった。しかし、今ではすべての文字を削除してサイズを抽出したいと思います。X最初のスペースから始めましょう。ところで、当時は理解できました。

> echo ${x%% *}
8192 mydir

8192だけではありません。

そのため、「du」によって生成されなかった他の変数で確認しました。

> y="8192 mydir"
> echo ${y%% *}
8192

これはなぜ適用されますか?ワイしかしそうではありませんX?私も確認しましたXそしてワイ同じ文字列です。

私はここで本当に混乱しています。誰かがこの質問に答えることができたら嬉しいですか?

ベストアンサー1

変数を二重引用符で囲むと、明らかに複数のスペースがあることがわかります。実際にはタブ文字ですが、一部のシステムではより明確に見えます。

echo "$x" | cat -e

したがって、タブ(またはスペース)をこの構造に一致させることで、最も長いシーケンスを削除できます。スペースやタブの後に何も含まれない"文字列値の末尾にバインド$x

echo "${x%%[[:blank:]]*}"

おすすめ記事