【发布时间】:2025-12-09 03:15:01
【问题描述】:
我有一行代码在我的终端中运行良好:
for i in *.mp4; do echo ffmpeg -i "$i" "${i/.mp4/.mp3}"; done
然后我将完全相同的代码行放入脚本myscript.sh:
#!/bin/sh
for i in *.mp4; do echo ffmpeg -i "$i" "${i/.mp4/.mp3}"; done
但是,现在运行时出现错误:
$ sh myscript.sh
myscript.sh: 2: myscript.sh: Bad substitution
基于其他问题,我尝试将shebang 更改为#!/bin/bash,但我得到了完全相同的错误。为什么我不能运行这个脚本?
【问题讨论】:
-
您是在脚本中使用#!/bin/sh 还是#!/bin/bash?
-
在控制台中,命令由
bashshell 执行。如果您在脚本中使用#!/bin/sh,则shshell 试图执行并因此出现错误。 -
我在第一行写了#!/bin/sh...
-
${foo/bar/baz} 不是 POSIX,因此可能不适用于您的特定 /bin/sh。请改用
#!/bin/bash。 @MichaWiedenmann 应该建议作为答案。 -
好的,如果我用 bash 而不是 sh 执行它,它就可以工作。
标签: bash sh substitution