bashスクリプトに変数を渡すときに一重引用符または二重引用符をエスケープする方法は?

bashスクリプトに変数を渡すときに一重引用符または二重引用符をエスケープする方法は?

エコーされるスクリプトがあるとしましょう。$1

#!/bin/bash
echo $1

と呼ばれていますtest.sh。それから私に電話しました/bin/test.sh 'test'。しかし、これはtestうまくいきません。

/bin/test.sh 'te'st'

文法的なエラーがあります。

たとえば、これらの2つの一重引用符の間には何もあります。

/bin/test.sh 'te"s"t'` or `/bin/test.sh 'te's't'` or `/bin/test.sh 'te"s't'

この問題を解決する方法はありますか?引用符のみを使用できます。変数内部の内容を変更できません。これはログ解析です。ログエントリには何でも含めることができます。

これらのパラメータを正しく受け入れるにはbashが必要です。

例:

/bin/test.sh '2015.11.11 07:45:44.060|executor-2|||ERROR|236 - PDF document for 5616904 wasn't created!'

'単語の単一の音が文字列内にないため、これは機能しません。

文字列は私が書いたように正確に配置されます。 Zabbix(モニタリングソリューション)と併用しています。 Zabbixでは、次のように表示されます。

/bin/test.sh '{$TRIGGER.VALUE}'

しかし、最終的には{$TRIGGER.VALUE}実際の文字列に置き換えられ、スクリプトはリテラル値として呼び出されます。

答え1

あなたのアプローチには根本的に欠陥があります。あなたは輸送のために肉を粉砕してハンバーガーにし、最終的に牛を取り戻したいと思います。いいえ、動作しません。

文字列をシェルコマンドに直接挿入せず、代わりに引数として渡してください。私はZabbixに慣れていませんが、ドキュメントを見るとこれがうまくいくようです(例:外部検査ユーザーパラメータ:コマンドとそれに必要なパラメータを指定します。したがって、これをコマンドとして指定し、test.shそれがインポートするパラメーターであることを指定してください"{TRIGGER.VALUE}"。明らかに(再び、私はZabbixに精通していません)、これはあなたが次のことを書いたことを意味します。

test.sh["{TRIGGER.VALUE}"]

test.shスクリプトの引数を引用するには、次のことを覚えておいてください。"$1"代わりに文章を書く必要があります$1

答え2

コマンドラインに一重引用符を入れるには、二重引用符またはバックスラッシュを使用します。

test.sh "'test'"
test.sh \'test\'

しかし、あなたの投稿を見ると、実際の問題は異なるようです。

変数内部の内容を変更できません

変数にすでに文字列がある場合は、変数を二重引用符で囲み、値を変更せずに渡すだけです。

test.sh "$var"

関連情報