パイプとバックスラッシュを含む連続行を使用してシェルスクリプトを生成するときにコメントを挿入したいと思います。別の行に、強力で読みやすく移植可能な方法で。
たとえば、コメント化されていない複数行コマンドがある場合(明確にするために@DigitalRossから取得)
echo abc |
tr a-z A-Z |
sort |
uniq
...次は私が達成しようとしている仕事に審美的に最も近いですが、明らかな理由で動作しません...はい、一般的に言及する価値がないことを理解しています。
# Perform critical system task.
# NOTE - An example of what does *not* work.
echo abc |
# Convert lowercase to uppercase.
tr a-z A-Z |
# Sort the results.
sort |
# Only show unique lines.
uniq
既存の関連回答が満足できないようです。、次のようになります。
まず、グレンジャックマンの答え(配列に引数を追加して配列を実行することは)単一のコマンドでは機能しますが、パイプラインでは機能しません。下痢 そうしても避けたい複雑さが追加されます。
第二に、@Gillesの答えはここにあります。(使用:
)はパイプの流れを変更するのでパイプでも動作しないようです。
$ echo "abc" | :
$
(ノート:出力を変更せずに渡すのと同じ機能がある場合は、:
審美的に受け入れることができますが、まだ見つかりませんでした。カスタム項目を作成できますが、そうすると移植性が低下します。 )
ついに最後の部分ですStackOverflowに対するDigitalRossの回答同じ行にコメントを付けるとうまくいきますが、私は別の行にコメントを付けることを好みます。それ以外の場合、行の長さが大きく変化すると読みやすくなります。
echo abc | # normal comment OK here`
/usr/local/bin/really/long/path/ridiculously-long-filename.sh | # another normal comment OK here
sort | # the pipelines are automatically continued
uniq # final comment
私は読みやすさを維持し、複雑さを最小限に抑える答えを探しています。あるいは、私が探しているものが実現できない理由についての背景知識を探しています。
答え1
これはどうですか?
echo abc | \
# Convert lowercase to uppercase.
tr a-z A-Z | \
# Sort the results.
sort | \
# Only show unique lines.
uniq
(バックスラッシュは次のように必要です。最後の文字このラインで。 )このアプローチがどれほど移植性があるかはわかりませんが、現在bash
。
答え2
少し愚かで非効率的ですが、動作し、|
-firstスタイルで動作します。
# Add a comment to a pipeline, old-school BASIC-style
function REM {
cat
}
cmd1 \
| REM "comment on cmd2" \
| cmd2 \
| REM "comment on cmd3" \
| cmd3
つまり、プロダクションコードでこれを見ると、おそらくそれを書いた人に怒って音を鳴らすことになります。注意して使用してください。
もっと真剣に、ブロックはどうですか{}
?
cmd1 \
| {
# comment on cmd2
cmd2
} \
| {
# comment on cmd3
cmd3
}