【问题标题】:"let" command is not found in my bash script在我的 bash 脚本中找不到“let”命令
【发布时间】:2023-03-10 16:45:01
【问题描述】:

我有以下 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

../img文件夹中,有文件pyr1920.pngpyr1925.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

但是我将脚本粘贴到终端中,它工作得非常好。

../img/pyr1920.png
../img/tmp/pyr1.png
../img/pyr1925.png
../img/tmp/pyr2.png

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

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

【问题讨论】:

  • 这不是bash 错误信息;您没有使用 bash 运行脚本。
  • 感谢您提供的信息,我会检查并尝试一下。
  • @chepner,是的,现在我意识到它适用于“bash myscript.sh”。如果我在脚本顶部写“#!/bin/bash”,它不会运行 bash 吗?
  • 应该;你怎么运行它?顺便说一句,$SHELL 不包含当前 shell 的名称;它是您的默认 shell 的名称。
  • 即使我的默认 shell 是 /bin/bash,我也只是打开一个终端并输入 $SHELL。我很困惑。

标签: bash


【解决方案1】:

这样做:

i=$((i+1))

i=$(expr $i + 1)

【讨论】:

  • 如果$((...)) 不起作用,则没有理由相信expr 也可用。
【解决方案2】:

很抱歉回答我的问题。 我使用sh script.sh 而不是bash script.sh 运行我的脚本。 bash script.sh 工作正常。

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

【讨论】:

  • 如果您通过将脚本名称作为参数传递给特定解释器(如 sh)来运行脚本,则忽略 shebang。它仅在您使脚本可执行并直接运行时使用(chmod +x script.sh; ./script.sh
  • 非常感谢您的评论!它解释得很清楚,为我节省了很多时间。我被困了很长时间。
  • @user26767:请接受一个答案,以防止其他人花时间在这上面。
  • 顺便说一句,添加(并接受如果你喜欢)你自己的答案并不是一件坏事。我们正在努力积累知识,这是过程的一部分。
【解决方案3】:

我也有同样的错误,检查我发现使用这段代码你得到了你需要的东西

i=`expr $i + 1`

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-01
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-07
    • 2013-11-10
    • 2016-09-27
    相关资源
    最近更新 更多