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 echo
dijemput.
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.
!event
sintaksis? Itu selalu menyebabkan saya hanya kesulitan.