Bashスクリプトでglob式を変数に割り当てる方法は?



How Assign Glob Expression Variable Bash Script



解決:

私はそれが拡張の順序だと思います:

拡張の順序は次のとおりです。ブレース拡張、チルダ拡張、パラメータ、変数と算術の展開とコマンド置換(左から右に実行)、単語の分割、およびパス名の展開。



したがって、変数が置換されると、中括弧の展開は行われません。これは私のために働きます:

eval ls $ dirs

evalには十分注意してください。それは逐語的にものを実行します。したがって、dirsにf {m、k} t *; some_command、some_commandは、lsが終了した後に実行されます。それはあなたが与えた文字列を実行します現在のシェルでeval。合格します/ content / dev01 / content / dev02からlsまで、存在するかどうかは関係ありません。パッティング*スタッフがそれをパス名拡張にした後、存在しないパスを省略します:



dirs = / content / {dev01、dev02} *

私はこれについて100%確信していませんが、それは私には理にかなっています。


これがあなたがやろうとしていることについての素晴らしい議論です。

簡単な答えは、配列が必要だということです。



dirs =(/ content / {dev01、dev01})

しかし、結果をどうするかは、私が思うよりも複雑になる可能性があります。


これはファイル名のグロブではなく、中括弧の拡張です。違いは微妙ですが、存在します。ファイル名のグロブでは、結果として既存のファイルのみを受け取りますが、中括弧の展開では、任意の種類の文字列を生成できます。

http://www.gnu.org/software/bash/manual/bashref.html#Brace-Expansion

http://www.gnu.org/software/bash/manual/bashref.html#Filename-Expansion

さて、これは私のために働いたものです:

#!/ bin / sh dirs = `echo ./ {dev01、dev02}` ls $ dirs