質問: bashで感嘆符を適切にエスケープする方法は? 今日、ゴルフの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 _厄介な感嘆符。 「逃げよう」と思った!結局、予備のキャラクターが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 _明らかに..._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コマンドで感嘆符をエスケープする適切な方法であるとは確信していません。tl; dr:bashコマンドで感嘆符を適切にエスケープするにはどうすればよいですか?
回答: 一重引用符を使用します。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から)他の引用ルールに移植されました。シェルにコマンドライン編集がなかったときは非常に便利でしたが、今でも使用している人もいます。p.s. 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 これはほとんどのユニスで機能します。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文字にする必要があるのか理解できません。)