$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!'
Wordの単一の'
が文字列内になかったため、これは機能しません。
文字列は私が書いたとおりに配置されています。 Zabbix(監視ソリューション)で使用しています。 zabbixでは次のようになります。
/bin/test.sh '{$TRIGGER.VALUE}'
しかし、最後に{$TRIGGER.VALUE}
は実際の文字列に置き換えられ、スクリプトはリテラル値で呼び出されます。
あなたのアプローチは根本的に欠陥があります。輸送のために肉をハンバーガーに挽き、最後に牛を取り戻します。いいえ、機能しません。
文字列を直接Shellコマンドに挿入する代わりに、引数として渡します。私はZabbixに精通していませんが、ドキュメントを見ると、これはそれがどのように機能するかのように見えます(たとえば 外部チェック 、 ユーザーパラメータ :コマンドとそれが取る引数を指定します。したがって、コマンドとして_test.sh
_のみを指定し、取得するパラメーターがその_"{TRIGGER.VALUE}"
_であることを指定します。どうやら(もう一度、私はm Zabbixに慣れていない)、これはあなたが次のようなものを書くことを意味します
_test.sh["{TRIGGER.VALUE}"]
_
_test.sh
_でスクリプトの引数を参照するには、 _"$1"
_ ではなく_$1
_を記述する必要があることに注意してください。
コマンドラインに一重引用符を付けるには、二重引用符またはバックスラッシュを使用します。
test.sh "'test'"
test.sh \'test\'
しかし、あなたの投稿から、あなたの本当の問題は違うようです:
変数の内容を変更することはできません
変数に既に文字列がある場合は、変数を二重引用符で囲んで、値を変更せずに渡します。
test.sh "$var"