0

我为 Mac OS X 编写了一个 bash 脚本,它收集大量计算机信息并将其写入 MySQL 数据库。除了一件事,一切都很好。我收集的信息之一是计算机名称。大约 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 回答