私は見て、見て、見てきたことを誓います。どこかでこれに対する答えを逃した場合は、お詫び申し上げます。それは、私が試していないということではなく、検索に失敗したことを意味します。
私は bash スクリプトに比較的慣れていませんが (:sigh: newbie)、ユーザーからの入力を受け取り、それを別のコマンドで使用するスクリプトを作成しようとしています。私の問題は、他のコマンドでユーザー入力の特殊文字をエスケープする必要があることです。
コードの基本的な形式は次のとおりです。
#!/bin/bash
echo "Enter info:"
read _INFO
othercommand info=$_INFO
read
とothercommand
行の間で、_INFO
特殊文字 (スペース、一重引用符と二重引用符など) がエスケープされるようにする必要があります。たとえば、 の入力は次のthis pipe: | is my info!
ようになります。this\ pipe\:\ \|\ is\ my\ info\!
othercommand
注:コマンドが失敗する原因となるため、一重または二重の引用符を行に入れることはできません。情報文字列は、エスケープされている場合を除き、そのままである必要があります。
文字列置換マクロをさまざまな方法で使用してみました (スペースのみをチェックする例をいくつか示します)。
_INFO = ${$_INFO// /\ }
_INFO = ${$_INFO// /\\ }
_INFO = ${$_INFO//" "/"\ "}
_INFO = ${$_INFO//" "/"\\ "}
_INFO = ${$_INFO//' '/'\ '}
_INFO = ${$_INFO//' '/'\\ '}
しかし、「悪い置換」エラーが発生し続けます。
したがって、これは具体的すぎる (スペースのみを処理する) だけでなく、とにかく機能しません。どうすればいいですか?
sed
または、bash スクリプト処理にネイティブではない何かを使用awk
する必要がある場合は、完全に慣れていないため、使用する必要がある正確な行が与えられることを好みます。(:はぁ:初心者)