考える
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)。