これは単なる「知りたいから」の質問ですか、それとも実際の使用例はありますか?体操をしてやり遂げることができます:
$ eval echo\ {a,b,c}\;
a
b
c
しかし、私は、この種の難読化コマンドをシステム スクリプトに入れている人を追い詰めます。
代わりに明快さを求めない理由:
$ for X in {a,b,c}; do echo $X; done
何をしようとしているのかを常に理解できるように、完全に独り占めして、改行をいくつか入れて少しインデントすることもできます。
Mark Mann の選択した回答に基づいて、この例をさらに導き出すことができました。これはうまく機能します:
$ eval echo\ category_{17,32,33}.properties\{,.bak\}\;
category_17.properties category_17.properties.bak
category_32.properties category_32.properties.bak
category_33.properties category_33.properties.bak
それが示しているのは、行内でブレース展開を複数回使用している場合、マークの元の例ではすべてのバリエーションが個別に印刷されていたということです。代わりに、彼の答えを使用して複数のファイルを移動/名前変更したかったのです。出力が mv
の形式と一致していることを確認するには 通常は (mv oldfilename newfilename
)、ブレース展開の 2 回目の発生をエスケープして、後 まで評価されないようにしました 最初の eval
コマンドが実行されました。
上記の出力が期待どおりに表示されたので、次のコマンドを実行できました:
$ eval mv\ category_{17,32,33}.properties\{,.bak\}\;
$ ls
category_17.properties.bak category_32.properties.bak category_33.properties.bak
マークの元の回答に感謝します。彼の答えが私にできることを気に入ったら、彼の答えに賛成票を投じてください:-)