連続文字の後にコメントを付けたbash複数行コマンド

連続文字の後にコメントを付けたbash複数行コマンド

考える

echo \ # this is a comment
foo

これは以下を提供します:

$ sh foo.sh
 # this is a comment
foo.sh: line 2: foo: command not found

いくつかのオンライン検索の最後に1つの場所が見つかりました。デジタルロスソリューション姉妹サイトStack Overflowから。だから人はできます

echo `: this is a comment` \
foo

または代替的に

echo $(: this is a comment) \
foo

しかし、DigitalRossは、これらのソリューションが機能する理由を説明していません。説明を聞きたいです。彼はそのコメントにこう答えた。

goto以下のように指定されたラベルに分岐するシェルコマンドがありました:。消えていますgotoが、それでも : whatever構文を使用できます...:今構文解析されたコメントです。

しかし、移植性に関する議論を含む、より詳細な内容と文脈を知りたいです。

もちろん、他のソリューションがある人もいればいいでしょう。

前の質問も参照してくださいシェルスクリプトで複数行コマンドをコメントアウトする方法は?


以下の議論で重要な情報を入手してください。これは`: this is a comment`単にコマンドの置き換えです。出力は: this is a comment何もなく、配置された位置にあります`: this is a comment`

より良いオプションは次のとおりです。

echo `# this is a comment` \
foo

ベストアンサー1

コメントは最初の改行文字で終わります(参照シェルトークン認識ルール10)、許可されない場合連続線したがって、このコードはfoo別のコマンドラインにあります。

echo # this is a comment \
foo

最初の提案では、バックスラッシュの後に改行文字がなく、単にスペースを引用することです。

echo ' # this is a comment'
foo

$(: this is a comment)コマンドの出力を変更してください: this is a comment。このコマンドの出力が空の場合、実際に行の途中にコメントを挿入するのは非常に混乱する方法です。

魔法のようなことは起こりません。:これは一般的なコマンドです。コロン何もしないユーティリティ。コロンユーティリティは、シェル構文にコマンドが必要ですが、他に何もしない場合に最も便利です。

# Sample code to compress files that don't look compressed
case "$1" in
  *.gz|*.tgz|*.bz2|*.zip|*.jar|*.od?)
    :  # do nothing, the file is already compressed
    ;;
  *)
    bzip2 -9 "$1"
    ;;
esac

別のユースケースは、変数がまだ設定されていない場合に変数を設定するイディオムです。

: "${foo:=default value}"

gotoに関するコメントは歴史的です。コロンユーティリティもボンシェルまでトンプソンシェル、その一つ行く指示。コロンはラベルを意味します。コロンはgotoラベルの非常に一般的な構文です(まだ存在しています)。sed)。

おすすめ記事