ファイル内のスペースをアンダースコアに置き換えます:私の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

おすすめ記事