このコマンドsed 's / ~ / / g'は何をしますか?

このコマンドsed 's / ~ / / g'は何をしますか?

最初は6つのパラメータセットをスクリプトに渡しました。

Script.sh a b c d e f

スクリプトでパラメータを管理するコマンドの1つ。

comm=$(echo $1 |sed 's/~/ /g')

答え1

このsed式は、s/~/ /g各チルダ文字を空白文字に置き換えます。文字通り、「~完全に(完全な入力行から)正規表現に一致するすべての項目を空白に置き換えます」を意味します。この場合、式は「faster」と書くことも、コマンドy/~/ /全体sedを「faster」に置き換えることもできますtr '~' ' '

これは以下でbashより効率的に実行できます。

comm=${1//\~/ }

~現在のユーザーホームディレクトリのパス名が拡張されないようにするには、ここでエスケープするか、引用符で囲む必要があります。

いずれにせよ、$1それを使用するには二重引用符で囲む必要がありますecho(シェルグローブをファイル名に拡張したくない限り)、理想的にはコマンドが作成されますprintf(これにより、最初のダッシュが$1ステートメントから何かとして解釈されるのを防ぐことができます)。いくつかのオプションの始めにecho、場合によっては特定のバックスラッシュシーケンスを解釈するのを避けるため):

comm=$( printf '%s\n' "$1" | tr '~' ' ' )

関連:

関連情報