シェルコマンド 'var="[ap]"; echo $var' は「h」を出力します。説明はありますか? [コピー]

シェルコマンド 'var=

バッシュバージョン:

$ bash -version
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.  
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

注文する:

$ var="[a-p]"; echo $var
h

この説明の理由が何であるかを知っている人がいます。

コンテキストシェルを使用して構成ファイルを解析し、部分名を取得するためのパターンを探しています。

[section-foo]
foo=bar

ファイルを読み取るときにセクション行がたとえば[ap]の場合、奇妙に動作します。

ベストアンサー1

h実行中のディレクトリにファイル名があります。

echo $var

シェルは[a-p]globを使用しようとし、一致がある場合はglobを一致と置き換えます。ファイル名が次のh場合

echo h

拡張を参照することでこれを防ぐことができ、これはグローバルと見なされません。

echo "$var"

おすすめ記事