実行ファイル名に「#」があると危険ですか?

実行ファイル名に「#」があると危険ですか?

これはよくある質問です。詐欺なら喜んで解決させていただきます。しかし、詐欺ならどうやって見つけるのかわかりません。また、文法関連文書を見つける方法を簡単に教えてくれる答えを受けたいと思います。 (man bash私たちは長い友達です。)

シェルスクリプトの名前を「f#」に指定したいと思います。

#!/bin/sh
dotnet fsi "$@"

これは、BashコマンドラインからF#プログラミング言語の実行可能ファイルを起動するショートカットとして機能します。

驚くべきことに、これは「#」がシェルコメント文字であるにもかかわらず機能します。スクリプトにパラメータを渡すこともできます。

$ f# hello.fsx
Hello World from F`
$

前のコマンドをスクリプトに含め、問題なくスクリプトを実行できます。 (!)

「#」は、前にスペースがある場合、または行の先頭にある場合にのみコメントを導入するのが規則のようです。それ以外の場合は、bashで通常の文字として扱われます。そうですか?

"f#"をスクリプト名として使用すると、後で私を悩ませる可能性がある明らかな問題はありますか?

ベストアンサー1

すべてのバージョンのbashとzshを含むすべてのshのようなシェルから#始めてください。コメント言葉の冒頭にいるとき。これは、スクリプトまたはネストされたシェルの先頭にあるか(たとえば$(# this is a comment、終端文字は)別々の行になければならない)、前に空白文字があるか、演算子文字(これらの1つ&|;<>)が前にあることを意味します。後でコメントは開始f#されませんf

特別な意味を持つところもありますが#、bashでは最初の文字ではなく単語の一部であるときに現れる場合が思い出せず、bashでは単語を期待します。 (bashが何か他のものを期待するとき、これは間違いなく特別な意味を持ちます。たとえば、#変数名の一部として使用することはできません。)zshでは、#次のようになります。ワイルドカードextended_glob(常に有効)オプションが設定されている場合。#エイリアスには問題はありませんが(エイリアスはグローブの前に拡張されます)、スクリプト名には問題があります。

これはシェルにのみ適用されます。他のツールに問題がある可能性があります#。構成ファイルのコメント文字としてよく発生します。たとえば、#拡張にGitエイリアスを含めることができるかどうかはわかりません。

おすすめ記事