[解決済み】Bashを使うときにエスケープする必要があるのはどの文字ですか?
質問
Bashでエスケープする必要がある文字の包括的なリストはありますか?それは
sed
?
特に、私がチェックしていたのは
%
はエスケープする必要があるかどうか。試しに
echo "h%h" | sed 's/%/i/g'
をエスケープすることなく、問題なく動作しました。
%
. という意味なのでしょうか?
%
はエスケープする必要がないのでしょうか?必要性を確認する方法はこれでよかったのでしょうか?
そして、より一般的なことですが、これらの文字は
shell
と
bash
?
解決方法は?
に限らず、簡単で安全なルールが2つあります。
sh
のみならず
bash
.
1. 文字列全体を一重引用符で囲む
これは、シングルクォート以外のすべての文字に対して有効です。シングルクォートをエスケープするには、その前のクォートを閉じ、シングルクォートを挿入し、再びクォートを開きます。
'I'\''m a s@fe $tring which ends in newline
'
sedコマンドを使用します。
sed -e "s/'/'\\\\''/g; 1s/^/'/; \$s/\$/'/"
2. すべての文字をバックスラッシュでエスケープする
これは、改行以外のすべての文字に対して有効です。改行文字にはシングルクォートまたはダブルクォートを使用します。
空の文字列を処理する必要があります。
""
\I\'\m\ \a\ \s\@\f\e\ \$\t\r\i\n\g\ \w\h\i\c\h\ \e\n\d\s\ \i\n\ \n\e\w\l\i\n\e"
"
sedコマンドを使用します。
sed -e 's/./\\&/g; 1{$s/^$/""/}; 1!s/^/"/; $!s/$/"/'
.
2b. 2のより読みやすいバージョン
のように、簡単に安全な文字の集合があります。
[a-zA-Z0-9,._+:@%/-]
これらはエスケープせずにそのままにしておくと、より読みやすくなります。
I\'m\ a\ s@fe\ \$tring\ which\ ends\ in\ newline"
"
sedコマンドを使用します。
LC_ALL=C sed -e 's/[^a-zA-Z0-9,._+@%/-]/\\&/g; 1{$s/^$/""/}; 1!s/^/"/; $!s/$/"/'
.
sedプログラムでは、入力の最終行が改行バイトで終わっているかどうかを知ることができないことに注意してください(空の場合を除く)。そのため、上記の2つのsedコマンドは改行がないものと仮定しています。手動で引用符で囲んだ改行を追加することができます。
シェル変数は、POSIXの意味でのテキストに対してのみ定義されていることに注意してください。バイナリデータの処理は定義されていません。重要な実装では、バイナリはNULバイトを除いて動作しますが(変数はC文字列で実装され、C文字列、すなわちプログラムの引数として使用されることを意図しているからです)、latin1のような"binary"ロケールに切り替える必要があります。
(のPOSIX仕様を読めば、そのルールを簡単に検証することができます)。
sh
. bashの場合は
参考マニュアル
リンク先:@AustinPhillips)
関連
-
[解決済み】shでJenkinsのステージから他のステージに変数を渡す
-
[解決済み] osx find exec rm find: exec: 不明な主またはオペレータ
-
[解決済み] MacOSのbashターミナルでexport PS1="\u[\033[m]@[\033[32m]\h:\[\033[33;1m]\w[\033[m]\$" は何を意味していますか?
-
[解決済み] bashの文字列の等値性テストで、予期しない演算子エラーが発生するのはなぜですか?重複
-
[解決済み] Bashでlsを使ってディレクトリだけをリストアップする?
-
[解決済み] XML文書でエスケープする必要がある文字は何ですか?
-
[解決済み] シェル変数の周りに中括弧が必要なのはどんなとき?
-
[解決済み] 対話型エディタを使わずに、Bashを使って自動的にcronジョブを作成する方法は?
-
[解決済み】Windows 7 x64でGit Bashの動作が極端に遅くなる件
-
[解決済み】bashで実行するために、実行ファイルやスクリプトの名前の前に./(ドットスラッシュ)が必要なのはなぜですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】ログアウトと再ログインをせずに.bashrcの設定を再読み込みする方法?
-
[解決済み] 部分的にコピーされたファイルでscpを再開する方法は?[クローズド]です。
-
[解決済み] Bashで文字列から改行を削除する方法
-
[解決済み] bashの文字列の等値性テストで、予期しない演算子エラーが発生するのはなぜですか?重複
-
[解決済み] bashスクリプトで変数の束縛を解除
-
解決策:bash: /root/.bashrc: パーミッションが拒否されました
-
[解決済み] シンタックスエラー」が発生しました。"(" unexpected' (expecting "done") [duplicate]".
-
[解決済み] Grep 'binary file matches'. どうすれば正常なgrepの出力が得られるか?[重複]する
-
[解決済み] Bashでコマンド内のシングルクォート内の変数を展開する
-
[解決済み] bash で文字列をエスケープするコマンド