0

多くのコンピューター情報を収集して MySQL データベースに書き込む Mac OS X 用の bash スクリプトを作成しました。1つのことを除いて、すべてが正常に機能します。私が収集する情報の 1 つは、コンピューター名です。おそらく約 90% のコンピューターの名前にアポストロフィが含まれています。問題は、変数を MySQL に書き込もうとすると、アポストロフィが原因でエラーになることです。

変数にアポストロフィが含まれているかどうか、および変数がエスケープ文字で書き換えられているかどうかを確認する方法はありますか? 私はsedを使用する必要があると確信していますが、私はまだこれにかなり慣れていません。

たとえば、次の変数があるとします。

COMPUTER_NAME="Fred Flintstone's MacBook Air"

変数を次のように変更するにはどうすればよいですか:

COMPUTER_NAME="Fred Flintstone\'s MacBook Air"

これを必要に応じて perl に渡すことができますが、むしろ BASH に保持したいと思います。

また、300 台を超えるコンピューターがあるため、コンピューターの名前を変更したくありません。

4

3 に答える 3

1

これにより、まだエスケープされていないアポストロフィがエスケープされます。

${COMPUTER_NAME/[^\\]\'/\\\'}
于 2013-03-28T21:42:21.673 に答える
1

あなたが望むものをエスケープするためにこれをやってみてください:

string="Hello, c'est bientôt l'été ?"
printf '%q\n' "$string"

出力

$'Hello, c\'est bient\303\264t l\'\303\251t\303\251 ?'
于 2013-03-28T22:08:06.977 に答える
0

置換を使用してパラメーター展開を使用できます。

COMPUTER_NAME="${COMPUTER_NAME//\'/\'}"
于 2013-03-28T21:39:52.583 に答える