-Bash: Syntaxisfout bij onverwachte token`) ‘

Ik mis waarschijnlijk iets heel eenvoudigs. Ik heb een webscript dat een Shell-script vertelt om sommige databasecords bij te werken. Deze records zijn voor statistieken en op deze manier hoeft het webscript niet te wachten terwijl de database-records worden bijgewerkt. Ik kan het Shell-script echter niet echt laten werken van de Commandline. Hier is de code die ik probeer:

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 vertelt me:

-bash: syntaxisfout bij onverwachte token`) ‘

Wat ben ik mis?


Antwoord 1, Autoriteit 100%

Het is niet mogelijk om Single Quote in Single Quotes te ontsnappen. Gebruik " "in plaats daarvan

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'))"

Er zijn ook andere manieren om met dit probleem om te gaan:

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

Al deze zouden quote'testals een enkele parameter moeten afdrukken. Wat betekent dat een andere geweldige oplossing voor uw probleem is:

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\'))'

Ik heb alleen een dollarteken $vlak voor de parameter geplaatst. Dat is het. Een dollarteken voor enkele aanhalingstekens wordt ANSI-C Quoting

Other episodes