バッシュバージョン:
$ 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"
答え2
引用符を使用しないと、echo $var
拡張は「分割」および「パス名拡張」(「ワイルドカード指定」または「ファイル名の生成」とも呼ばれます)に公開されます。
[
これは*
、(alsoと)を含む文字列が?
「パス名拡張」ルールに従って拡張されることを意味します。あなたの場合、これは名前が1文字だけのファイルがあることを意味しますh
。
拡張子が引用されると、「パス名拡張」は実行されません。
$ echo "$var"
[a-p]