Hari ini, saya ketahuan saat mencoba kode golf generator kata sandi untuk Twitter.
import string as s,random;print ''.join(random.sample(s.letters+s.digits+s.punctuation,9))
90 karakter. Karena ada banyak ruang kosong, saya memutuskan untuk menaikkan standar dan membuatnya dapat dieksekusi juga.
echo -e "#!/usr/bin/python\nimport string as s,random;print ''.join(random.sample(s.letters+s.digits+s.punctuation,9))">pg;chmod +x pg;./pg
139 karakter. Bagus, kecuali jelas bash tersedak titik seru.
badp@delta:~$ echo -e "#!/usr/bin/python\nimport string as s,random;print ''.join(random.sample(s.letters+s.digits+s.punctuation,9))">pg;chmod +x pg;./pg
bash: !/usr/bin/python\nimport: event not found
Titik seru sial. "Ayo kita lepaskan," pikirku! Saya memang punya satu karakter cadangan.
echo -e "#\!/usr/bin/python\nimport string as s,random;print ''.join(random.sample(s.letters+s.digits+s.punctuation,9))">pg;chmod +x pg;./pg
Jelas ...
badp@delta:~$ echo -e "#\!/usr/bin/python\nimport string as s,random;print ''.join(random.sample(s.letters+s.digits+s.punctuation,9))">pg;chmod +x pg;./pg
./pg: line 2: syntax error near unexpected token `('
./pg: line 2: `import string as s,random;print ''.join(random.sample(s.letters+s.digits+s.punctuation,9))'
badp@delta:~$ cat pg
#\!/usr/bin/python
import string as s,random;print ''.join(random.sample(s.letters+s.digits+s.punctuation,9))
Mengesampingkan kode asinine saya golf - saya tidak bisa menjelaskan ini.
Dengan \!, tanda seru itu lolos, kecuali sebenarnya tidak, karena \!dibiarkan apa adanya untuk echodijemput.
Satu solusi bisa saja menggunakan \x21, tapi saya tidak yakin itu cara yang tepat untuk lolos dari tanda seru di perintah bash.
tl; dr: Bagaimana Anda bisa lolos dari tanda seru dengan perintah bash?
!:0 !$Dan !^menghemat banyak waktu dan mengetik.
!eventsintaksis? Itu selalu menyebabkan saya hanya kesulitan.