二重置換を使用したBash ls

二重置換を使用したBash ls

私はコマンドライン引数からディレクトリを読み込んで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}"

それにもかかわらず、スクリプトからシェルの拡張を複製することは一般的ではなく、ユーザーをパニックにする可能性があるため、お勧めできません。そうすれば、あなたも決定を下す必要がありますどのサポートするように拡張されました。すべての拡張がすべてのシェルでサポートされるわけではなく、各シェルでサポートされているすべての拡張がすべてのユーザーに認識されているわけではありません。

おすすめ記事