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
質問に対するコメントに基づいて質問に答えるには、次の手順を実行します。
$
中かっこ文字の前にドル文字を入れる必要があります{
。""
それに加えて、()変数を引用することをお勧めします。- 最後に、すべてのスペースを下線に置き換えるには、2つのスラッシュ()を「欲張りな」置換に使用する必要があります
//
。
したがって、サンプルスクリプトは次のようになります。
#!/bin/bash
for myfile in *
do
mv "${myfile}" "${myfile// /_}"
done
メモ:新しい名前を保持するために追加の変数は必要ありません。