xargs -I#が予期しない動作を示します。なぜですか?

xargs -I#が予期しない動作を示します。なぜですか?

特定のディレクトリに複数のフォルダを圧縮して、各フォルダのzipファイルを作成したいと思います。これを行うには、次のコマンドを使用します。

$ find -maxdepth 1 -mindepth 1 -type d | xargs -I@ zip -r @.zip @

これは期待どおりに機能します。

#しかし、偶然、次の代わりに代替文字列として使用したときに予期しない動作が見つかりました@

$ find -maxdepth 1 -mindepth 1 -type d | xargs -I# zip -r #.zip #

zip error: Invalid command arguments (cannot write zip file to terminal)

zip error: Invalid command arguments (cannot write zip file to terminal)

... and so on (the same message repeated for every folder)

#コメントは一般的にオンになっているので、ここに問題があることは明らかです。しかし、コマンドラインが実際になると思いましたfind -maxdepth 1 -mindepth 1 -type d | xargs -I。なぜなら、最初の行から含めて、すべてがコメントで#削除されたからです。

しかし、明らかにzip命令を履行した。なぜ?

ベストアンサー1

コメント(bashシェル内)は役割によって紹介されます#。ただし、これは#文字が引用されず、単語の最初の文字(トークン)の場合にのみ発生します。

#単語の最初の文字以外の文字として引用または発生した場合、コメントは導入されません。

比較する:

$ echo this is a #comment
this is a
$ echo this is not a#comment
this is not a#comment
$ echo not a '#comment'
not a #comment

対話型シェルでは、コメントは次のようになります。いいえinteractive_commentsシェルオプションがオフの場合(デフォルトではオン)、導入されます。

$ shopt -u interactive_comments
$ echo not a #comment
not a #comment

おすすめ記事