私はコマンドライン引数からディレクトリを読み込んでls
これを行うbashスクリプトを書いています。
単純なディレクトリを指定すると、すべてが正常です。
しかし、同様のことをしたいので、という変数に格納されている値を/home/{x,y}
使用してスクリプトが呼び出されます。my-script -d '/home/{x,y}'
'/home/{x,y}'
source
試してみましたが
ls "${source}"
帰ってきました。ls: cannot access /home/{x,y}: No such file or directory
試してみました
ls ${!source}
が、現在のディレクトリのファイルが返されます。試しましたが、
ls \$$source
最初のエラーで再び失敗しました。
'/home/{x,y}'
スクリプトが実行されるようにスクリプトのパラメータを拡張するにはどうすればよいですかls /home/x /home/y
?
ベストアンサー1
一般的なアプローチは、オプションフラグなしでディレクトリをデフォルトのコマンドライン引数として渡すことです。つまり、ユーザーはmy-script -a -b foo /home/me/dir1 /some/other/path
構文解析オプションを実行した後、getopts
場所引数にディレクトリを保持して実行できますls "$@"
。ここでユーザーは、またはシェルで埋めることができる拡張を使用して最後の引数を埋めることができ/some/path/{foo,bar}
ます/some/path/*
。
または、ユーザーが-d
実行している項目に複数のオプションを渡すようにします。ここで拡張を使用することは、シェルが許可するすべての項目を各引数の前に追加する必要があるmy-script -a -b foo -d /home/me/dir1 -d /some/other/path
ため、より困難です。-d
たぶん同様のものがあるかもしれませんa=(/path/{this,that}); my-script -a -b foo "${a[@]/#/-d}"
。
それにもかかわらず、スクリプトからシェルの拡張を複製することは一般的ではなく、ユーザーをパニックにする可能性があるため、お勧めできません。そうすれば、あなたも決定を下す必要がありますどのサポートするように拡張されました。すべての拡張がすべてのシェルでサポートされるわけではなく、各シェルでサポートされているすべての拡張がすべてのユーザーに認識されているわけではありません。