ファイル内のスペースをアンダースコアに置き換えます:私のbashスクリプトにエラーがあります。

ファイル内のスペースをアンダースコアに置き換えます:私のbashスクリプトにエラーがあります。

Bashスクリプトのエラーを理解していません。

#!/bin/bash
newFile=""
for file in *
do
    newFile={$file/ /_}     # so as to replace spaces with underscores
    mv {$file} {$newFile}
done

newFileこれはその行のコマンドではないと文句を言います。newFile={$file/ /_}

私が何か間違っているようですが、この問題に引き続き転倒しています。

答え1

すべての空白に対してこれを行うには、$位置を移動して/最後の場所を追加する必要があります。また、ファイル名のスペースを mv 引数間の区切り文字として扱うので、変数を引用する必要があります。

#!/bin/bash
newFile=""
for file in *
do
    newFile=${file// /_}     # so as to replace spaces with underscores
    mv "{$file}" "{$newFile}"
done

他の回答で述べたように、このスクリプトの半分は重複しています。

newFile=""

後で代入で変数を最初に参照できるため、まったく必要ありません。

 newFile=${file// /_}

割り当て自体は必要ありませんが、パラメータ置換は元の値を変更しないためです。

したがって、次のように書き換えることができます。

#!/bin/bash
for file in *
do
    mv "${file}" "${file// /_}" 
done

答え2

質問に対するコメントに基づいて質問に答えるには、次の手順を実行します。

  1. $中かっこ文字の前にドル文字を入れる必要があります{
  2. ""それに加えて、()変数を引用することをお勧めします。
  3. 最後に、すべてのスペースを下線に置き換えるには、2つのスラッシュ()を「欲張りな」置換に使用する必要があります//

したがって、サンプルスクリプトは次のようになります。

#!/bin/bash

for myfile in *
do
    mv "${myfile}" "${myfile// /_}"
done

メモ:新しい名前を保持するために追加の変数は必要ありません。

関連情報