2013-09-05 8 views
5

मुझे शायद कुछ मूलभूत याद आ रही है। मेरे पास एक वेब स्क्रिप्ट है जो कुछ डेटाबेस रिकॉर्ड अपडेट करने के लिए एक शेल स्क्रिप्ट बताती है। ये रिकॉर्ड आंकड़ों के लिए हैं, और इस तरह वेब स्क्रिप्ट को डेटाबेस रिकॉर्ड अपडेट होने पर प्रतीक्षा करने की आवश्यकता नहीं है। हालांकि, मैं वास्तव में शेल स्क्रिप्ट काम को कमांडलाइन से नहीं चला सकता।-bash: अप्रत्याशित टोकन के पास वाक्यविन्यास त्रुटि ')'

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:

) अप्रत्याशित टोकन के पास ` 'सिंटेक्स त्रुटि क्या मुझे याद आ रही यहाँ कोड है कि मैं कोशिश कर रहा हूँ है?

उत्तर

9

एकल उद्धरण में एकल उद्धरण से बचना संभव नहीं है। " " बजाय

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

पर बदल जाता है
संबंधित मुद्दे