時間と状態でメッセージを記録する機能を持つBashスクリプトがあり、スクリプトの80列だけを保持したいと思います。
#!/bin/bash
log_message() {
echo "[$(date)]-[$1] : $2" >> log.txt
}
varName="John Doe"
# line break to not exceed 80 columns
log_message "WARNING" "I am "${varName}" and i want to limit this line \
to 80 columns"
ログファイルの結果が予想と異なります。
[Fri Jun 24 13:50:12 CEST 2022]-[WARNING] : I am John
Bashでこれを行う正しい方法は何ですか?
ベストアンサー1
あなたの場合、問題は行の連続にあるのではなく、2番目のパラメータに二重引用符をエスケープせずに使用しているという事実にあります(@Stéphaneの答えを見ると、実際にこれを意図したかもしれません。これが良い考えではない理由については、以下を参照してください。)。試してみてください
log_message "WARNING" "I am \"${varName}\" and i want to limit this line \
to 80 columns"
以前にエスケープされていない引用符を使用した変数参照${varName}
は、実際には外部二重引用符とスプレーしたがって、log_message
呼び出しには次のパラメータが表示されます。
WARNING
I am John
(そのJohn
部分は「閉じる」二重引用符の直後にあるため、まだ2番目のタグの一部と見なされます。)Doe and i want to limit this line to 80 columns
(Doe
2番目のパラメータと同じ理由で3番目のパラメータに追加)John
ただし、関数はlog_message
最初の2つの引数のみを解釈するため、残りの文字列フラグメントは失われます。