在我的 bash 脚本中找不到“let”命令

use*_*767 4 bash

我有以下 bash 脚本,

#!/bin/bash
echo $SHELL

i=1
for img in ../img/*.png; do
  echo $img
  new=$(printf "../img/tmp/pyr%d.png" "$i")
  echo $new
  # cp "$img" "$new"
  let i=i+1
done
# avconv -r 2  -i ../img/tmp/pyr%d.png -b:v 1000k ../pop_pyr.mp4
Run Code Online (Sandbox Code Playgroud)

../img文件夹中,有文件pyr1920.png, pyr1925.png, ...

当我运行此脚本时,出现此错误

../img/pyr1920.png
../img/tmp/pyr1.png
make_video.sh: 10: make_video.sh: let: not found
../img/pyr1925.png
../img/tmp/pyr1.png
Run Code Online (Sandbox Code Playgroud)

但是我将脚本粘贴到终端中,它运行良好。

../img/pyr1920.png
../img/tmp/pyr1.png
../img/pyr1925.png
../img/tmp/pyr2.png
Run Code Online (Sandbox Code Playgroud)

我的环境是 ubuntu 14.04。我知道默认的 /bin/sh 是破折号。我确保使用 bash 并通过echo $SHELL.

为什么它不能作为脚本工作,但在终端上工作正常?我试图找到一个解决方案,但我能找到的只是关于“破折号”和“bash”设置。

use*_*767 7

很抱歉回答我的问题。sh script.sh我正在使用not运行我的脚本bash script.shbash script.sh工作得很好。

但是我不是可以通过#!/bin/bash在脚本顶部指定它吗?

  • 如果通过将脚本名称作为参数传递给特定解释器(如“sh”)来运行脚本,则 shebang 将被忽略。仅当您使脚本可执行并直接运行它时才使用它(`chmod +x script.sh; ./script.sh`) (4认同)