コメントアウトされたソース複数行コマンドで「コマンドが見つかりません:#」

コメントアウトされたソース複数行コマンドで「コマンドが見つかりません:#」

存在するfoo.sh、読みやすくするために、いくつかのコマンド(または機能)を複数行に分割してコメントを追加しました。

#!/bin/zsh
#
# foo.sh: print computer information

foo() {
    uname \
        -p `# processor arch` \
        -s `# os name` \
        -v `# os version`
}

foo

何が起こるのか

私はよく動くことができる:

$ ./foo.sh
Darwin 123... (correct output)

うまくいかない

ただし、sourceORを使用してインポートすると、.シェル自体は私が指定した引数()を使用してコマンドを正常に実行しますが、次のエラーを報告します-psv

% . ./foo.sh
./foo.sh:2: command not found: #
./foo.sh:2: command not found: #
./foo.sh:2: command not found: #
Darwin 123... (correct output as before)

なぜこれが起こるのか知りたいです。どうすれば解決できますか?私の主な目標は、いくつかの関数を定義し、インポートし、必要に応じてシェルから呼び出すことです。ありがとうございます!

ベストアンサー1

デフォルトでは、zshはインタラクティブに実行されたときではなくスクリプトのコメントのみを認識します。これはソーススクリプトで動作しますが、最近のバージョンでは(5.8でこの動作を再現しましたが、5.4.2ではコードを正常に受け入れます)、ロード後に解析されるいくつかのコード(コマンド置換コードなど)でも機能します。これはバグかもしれません。

置くsetopt interactive_commentsインタラクティブに実行するときのコメントをサポートします.zshrc。ここには実際に欠点はありません。つまり、#単語の先頭に引用する必要がありますが、#コマンドラインの単語の先頭にはほとんど引用しないはずです。 (コメントは単語内で始まらないため、ワイルドカードとして使用したり、パラメータ拡張には影響しません#。)#extended_glob

代わりに(または追加で)以下を追加してください。

setopt local_options interactive_comments

関数の内部。その後、コメントが機能します。

おすすめ記事