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?
bash
command-history
quoting
badp
sumber
sumber
!event
sintaksis? Itu selalu menyebabkan saya hanya kesulitan.!:0
!$
Dan!^
menghemat banyak waktu dan mengetik.Jawaban:
Gunakan satu kutipan:
Aturan untuk
!
itu semacam dicangkokkan ke aturan mengutip lainnya sesudahnya (dari csh). Mereka sangat berguna saat shell tidak memiliki pengeditan baris perintah, tetapi beberapa orang masih menggunakannya sekarang.PS Karena Anda mengkode untuk bash:
Ini berfungsi pada sebagian besar persatuan:
(Bukannya saya mengerti mengapa Anda ingin membuat skrip atau mengapa nama skrip harus dua huruf.)
sumber
$''
. :) PS: Itu untuk mencoba dan menggunakan karakter cadangan itu. Saya memiliki perasaan sia-sia ketika saya memposting tweet yang lebih pendek dari 140 karakter.pwgen
vspwgen -s
..)Seharusnya saya mencari Google sebelum bertanya.
sumber