2013-09-05 21 views
5

Muhtemelen çok temel bir şey eksik. Bazı veritabanı kayıtlarını güncellemek için bir kabuk komut dosyası veren bir web komut dosyası var. Bu kayıtlar istatistikler içindir ve bu şekilde web komut dosyasının veritabanı kayıtları güncellenirken beklemesi gerekmez. Ancak, aslında kabuk betiği çalışmasını komut satırından çalıştıramaz.-bash: beklenmedik belirtinin yanında sözdizimi hatası `) '

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 söylüyor:

-bash:

') `beklenmedik belirteci yakın sözdizimi hatası ben eksik İşte çalışıyorum kodudur?

cevap

9

Tek tırnak işaretlerinden tek alıntıdan çıkmak mümkün değildir. Tüm bu tek parametre olarak quote'test yazdırmalısınız

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

: Diğer Bu sorunla başa çıkmak için yollar vardır, ayrıca yerine

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


" " kullanın. Hangisi sorun için bir başka harika bir çözüm olduğu anlamına gelir:

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

Ben sadece sağ parametreden önce bir dolar işareti $ yerleştirdik. Bu kadar. Tek tırnaklardan önce bir dolar işareti ANSI-C Quoting

İlgili konular