エコーされるスクリプトがあるとしましょう。$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"