
今日、私はTwitterのパスワードジェネレータのゴルフコードを書こうとしました。
import string as s,random;print ''.join(random.sample(s.letters+s.digits+s.punctuation,9))
90文字。空き容量が多く、基準を上げて実行可能にすることにしました。
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文字。 bashが明らかに感嘆符のせいで窒息していることを除けば大丈夫です。
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
迷惑な感嘆符。 「逃げよう」と思いました!結局、バックアップキャラクターができました。
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
確かに…
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))
私の愚かなゴルフコードはさておき-私はこれを説明できない。
を使用すると\!
感嘆符がエスケープされますが、ピックアップの\!
ために残りますので、実際にはそうではありませんecho
。
1つの解決策は代わりに使用することですが、\x21
これはbashコマンドで感嘆符をエスケープする正しい方法だとは思わない。
簡単に言うと:bashコマンドで感嘆符を正しくエスケープする方法は?
答え1
一重引用符を使用してください。
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
後で、ルールは!
別の引用規則(cshから)に移植されました。シェルにコマンドライン編集機能がない場合に便利ですが、一部の人はまだそれを使用しています。
PS:bashをコーディングしているので:
echo $'#!/usr/bin/python\nimport string as s,random;print"".join(random.sample(s.letters+s.digits+s.punctuation,9))'>pg;chmod +x pg;./pg
これはほとんどのuniceで動作します。
echo python -c \''import string as s,random;print"".join(random.sample(s.letters+s.digits+s.punctuation,9))'\'>pg;chmod +x pg;./pg
(なぜスクリプトを書くのか、スクリプト名がなぜ2文字であるのかわかりません。)
答え2
尋ねる前にグーグルをしてみたはずだった。
変数[..]を拡張するためにbashに依存しないので、単一引用符を使用できます。一重引用符で囲まれた文字列は bash には拡張されません。
鳴る存在する返信する到着感嘆符を避ける方法は?