sed でシェル ワイルドカードを使用しようとしています。以下は失敗します。(出力として期待foo
しています。)
$ touch foo
$ ls
foo
$ echo *
foo
$ bar=*
$ echo $bar
foo
$ echo "$bar"
*
$ echo replace | sed "s/replace/${bar}/"
*
$ echo replace | sed "s/replace/"${bar}"/"
*
予想どおり、 (二重) 引用符で囲まれているためfoo
、最後から 2 番目のコマンドは を生成しません。${bar}
ただし、最後のコマンドでワイルドカードを展開することを期待していました。
ただし、次の後にいずれかのコマンドを機能させることができます。
bar=$(echo *)
さらに、次のシェルのワイルドカード展開を期待していましたが、これは発生しません。
$ echo replace | sed s/replace/*/
*
ただし、これは機能します。
$ echo replace | sed s/replace/$(echo *)/
qwe