我不明白 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
根据对您问题的评论回答您的问题:
- 您需要将美元字符放在
$
大括号字符之前{
。 ""
除此之外,引用 ( ) 变量是一个很好的做法。- 最后,要将所有空格替换为下划线,您需要使用两个斜杠 (
//
) 来“贪婪”替换。
因此示例脚本将如下所示:
#!/bin/bash
for myfile in *
do
mv "${myfile}" "${myfile// /_}"
done
笔记:不需要额外的变量来保存新名称