bash - -bash : syntax error near unexpected token `)'

标签 bash shell

我可能遗漏了一些非常基本的东西。我有一个 web 脚本告诉 shell 脚本更新一些数据库记录。这些记录是为了统计,这样web脚本就不用等待数据库记录更新了。但是,我实际上无法使 shell 脚本从命令行运行它。这是我正在尝试的代码:

perl async_sql.pl 'UPDATE some_table set i = i + 1 WHERE (n in (\'328430\',\'334969\',\'330179\',\'335290\',\'335285\',\'335284\',\'335264\',\'335145\',\'335146\',\'335147\',\'335148\',\'335149\',\'335230\',\'335201\',\'335198\',\'335196\',\'335167\',\'335151\',\'335152\',\'335143\',\'334969\',\'334972\',\'334977\',\'334978\',\'334979\',\'334980\',\'334982\',\'334983\',\'334984\',\'334934\',\'334947\',\'334948\',\'334950\',\'334992\',\'335014\',\'335026\',\'335030\',\'335032\',\'334864\',\'334862\',\'334861\',\'334858\',\'334855\',\'334852\',\'334850\',\'334849\',\'334848\',\'334847\',\'334844\',\'334842\'))'

Bash 告诉我:

-bash: syntax error near unexpected token `)'

我错过了什么?

最佳答案

单引号中的单引号是不可能转义的。使用 "" 代替

perl async_sql.pl "UPDATE some_table set i = i + 1 WHERE (n in ('328430','334969','330179','335290','335285','335284','335264','335145','335146','335147','335148','335149','335230','335201','335198','335196','335167','335151','335152','335143','334969','334972','334977','334978','334979','334980','334982','334983','334984','334934','334947','334948','334950','334992','335014','335026','335030','335032','334864','334862','334861','334858','334855','334852','334850','334849','334848','334847','334844','334842'))"


此外,还有其他方法可以解决此问题:

echo "quote'test"
echo 'quote'"'"'test'
echo 'quote'\''test'
echo $'quote\'test'

所有这些都应将 quote'test 作为单个参数打印。这意味着您的问题的另一个很好的解决方案是:

perl async_sql.pl $'UPDATE some_table set i = i + 1 WHERE (n in (\'328430\',\'334969\',\'330179\',\'335290\',\'335285\',\'335284\',\'335264\',\'335145\',\'335146\',\'335147\',\'335148\',\'335149\',\'335230\',\'335201\',\'335198\',\'335196\',\'335167\',\'335151\',\'335152\',\'335143\',\'334969\',\'334972\',\'334977\',\'334978\',\'334979\',\'334980\',\'334982\',\'334983\',\'334984\',\'334934\',\'334947\',\'334948\',\'334950\',\'334992\',\'335014\',\'335026\',\'335030\',\'335032\',\'334864\',\'334862\',\'334861\',\'334858\',\'334855\',\'334852\',\'334850\',\'334849\',\'334848\',\'334847\',\'334844\',\'334842\'))'

我只在参数前放置了一个美元符号 $。就是这样。单引号前的美元符号打开 ANSI-C Quoting

关于bash - -bash : syntax error near unexpected token `)' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18626209/

相关文章:

python - & 在 bash 命令之后

bash - 正则表达式、捕获组和美元符号

linux - 搜索和替换(多行)

linux - 如何在 Shell 脚本中修复 "cannot open shared object file"?

linux - 在 AWK 中比较两个文件

bash - 如何在 bash 中获取 10 点之前的当前时间字符串?

bash - 测试是否有任何文件超过 7 天

linux - 当开机时间超过30分钟时重新启动计算机

bash - 大写下划线后的第一个字符

python - 从 python 脚本,更改用户,设置环境并运行几个命令