`$ {f // / _}`での二重スラッシュの意味は何ですか?


17

私はBashを学んでいますが、スペース文字を他の「空白でない」文字に置き換えたいと思います。私はforループを使用しています:

for f in *\ *; do mv "$f" "${f// /_}"; done

私の質問は、なぜ二重スラッシュとスペースが入っているの${f// /_}ですか?何を${f// /_}するの?


3
暗記する必要がない場合は、少なくともどこで読むべきかを知っておく必要があります。それはbashマニュアルにあります
グレンジャックマン

回答:


19

これは、bashパラメーター展開を使用した置換パターンです。

${f// /_}

  • 二重スラッシュ//は、スペースのすべての出現をに置き換える_ためのものです。スラッシュを1つ入れると、/最初のスペースのみが置き換えられます。

  • スペースを下線で置き換えているため、スペースがあります

したがって、パターンは基本的に次のとおりです。

${parameter//find/replace}

man bashより多くのアイデアを得るためにチェックしてください。

Parameter Expansionセクションにman bashすぐにアクセスするには:

LESS=+/'Parameter Expansion' man bash

2
要するに、それはグローバルな検索と置換です。
グレンジャックマン

3

セクション"{f// /_}は、すべてのスペースをアンダースコアで置き換えることを意味します。これはBashパラメーター展開を使用しており、でf定義された変数for f in *\ *;はシェル展開(グロビング)のすべての一致に対して実行されます。見つかったファイル名が値になるたびに$f

パラメーター展開//は、後続の文字//(この例ではスペース)が出現するたびに、後続の文字(この例では/下線)で置き換える必要があるという意味で機能します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.