みたいなことをしたいbzr commit -m "It works!"
。することで感嘆符をエスケープすることができますbzr commit -m "It works\!"
。ただし、コミットメッセージにはバックスラッシュが含まれます。バックスラッシュを無視しながら、感嘆符をエスケープするにはどうすればよいですか?
bzr commit -m "It works!"
みたいなことをしたいbzr commit -m "It works!"
。することで感嘆符をエスケープすることができますbzr commit -m "It works\!"
。ただし、コミットメッセージにはバックスラッシュが含まれます。バックスラッシュを無視しながら、感嘆符をエスケープするにはどうすればよいですか?
bzr commit -m "It works!"
回答:
コミットメッセージの変数を展開するためにbashに依存しないため、代わりに単一引用符を使用できます。単一引用符で囲まれた文字列は、bashによって展開されません。
bzr commit -m 'This does work!'
二重引用符と感嘆符が必要な場合の別の方法を次に示します。
echo "It's broken"'!'
!
が行末になくても機能します。
例えば:
echo "hello there"'!'" and goodbye"
ボーナス:同様の手法を使用して、ShまたはBashのテキストを(sedを使用して)エスケープできます。この回答の最初のオプションを参照してください。さらに、bash-completion
インストール済みの場合は、おそらくそのquote()
機能が既に使用可能になっています。
echo "Happy birthday!"
期待どおりに動作します。そうでない場合はバックスラッシュでエスケープできますが、バックスラッシュも出力されます。
echo "Happy Birthday!"
2行を出力します。1つ目はecho "Happy birthday"
(感嘆符なし)、2つ目は「お誕生日おめでとう」(再び感嘆符なし)です。このテストを行うときに、履歴の展開が有効になっていますか?
version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
は間違いなく1つだけ!
です。私はにhistexpand
出席してい$SHELLOPTS
ます。ただし、別のマシンで4.3.18(2)-releaseを試したところ、説明どおりに動作します。修正されたバグだったと思います。
履歴展開をオフにします。
set +H
または
set +o histexpand
~/.bashrc
通常、履歴展開を使用しない場合は、これらのコマンドのいずれかを追加できます。
Bash 4.3は特別なケースを追加しました:
二重引用符で囲まれた文字列内の終了二重引用符の直前にある場合、履歴展開文字も引用符として扱われます
set +o histexpand
、私はやらなければなりませんでしたset -o histexpand
。これを修正するために答えを編集できますか?
.bashrc
THX !!、決して使用される!
スクリプトにし、何のために!それは常に...厄介た
echo "@AquariusPower!"
echo
感嘆符で区切る必要がある文字列(文)で少なくとも機能する別の方法を見つけました。Bash histexpandを中心にエンドランを実行しますが、コーディングには少し時間がかかります。
http://www.ascii-code.com/にリストされている感嘆符の16進数
は21であるため\x21
、文字列の末尾に置くと、独自の拡張エコーをecho -e $foo
作成$foo
します(つまり、foo=$(echo -e "$foo")
)あなたがecho $foo
再び文字列で!
終わるときに取得します。また、histexpandも切り替えません。
Bash 4+で確実に動作します。以前のバージョン、ymmv。
printf "OMG\041"
。echoまたはprintf以外の場所に二重引用符で囲まれた文字列を作成する場合(コミット文字列OPについての質問$(echo -e "\041")
など)、感嘆符のあるべき場所に文字列を埋め込むことができます。このようにbzr commit -m "This is a great commit$(echo -e "\041")"
。
bzr commit -m "It works"!
も、作品を。