echo -eのエスケープ文字

echo -eのエスケープ文字

.bashrcログに使用するファイルの内容は次のとおりです。

function log(){

  RED="\e[0;31m"
  RESET="\e[0m"
  echo -e "${RED}$(date)" "${RESET}$*" >> "$HOME"/mylog.txt
}

ただし、アポストロフィを使用して操作を実行すると、ある種のヒントが表示され、正しく記録されません。

ファイルに入力されたすべてのテキストをどのようにエスケープできますか?

例:

$ log this is a testing's post
> hello
> 
> ^C
$

ありがとうございます。

ベストアンサー1

echo -eあなたが経験している問題はあなたのlog()機能とは関係ありません。問題はアポストロフィです。

log this is a testing's post

シェル(あなたの場合はbash)は特定の文字に対して特別な意味を持ちます。アポストロフィ(一重引用符)は文字列全体を引用するために使用され、他のほとんどの種類の補間を防ぎます。bashは彼らがペアで来たいと思っています。これが、2番目のプロンプト行を入力するまで追加のプロンプト行が表示される理由です。文字列に単一引用符を使用するには、\'次のようにエスケープして bash に通知する必要があります。

log this is a testing\'s post

繰り返しますが、logそれはポイントではありません。echo必要に応じて、従来の方法で試してみることができます。

echo this is a testing\'s post

バラよりBashでエスケープする必要がある文字より多くの情報を知りたいです。

おすすめ記事