【问题标题】:Writing a for loop in bash using a variable使用变量在bash中编写for循环
【发布时间】:2012-10-26 10:33:25
【问题描述】:

我想在 bash 中创建一个 for 循环,该循环从 1 运行到存储在 bash 中的变量中的数字。我已经尝试按照this 问题的答案进行操作,但它会产生此错误:

Syntax error: Bad for loop variable

我的操作系统是 Ubuntu 12.04,代码如下:

#!/bin/bash
TOP=10
for ((i=1; i<=$TOP; i++))
do
    echo $i
done

这个错误信息是什么意思?这是输出图像:

【问题讨论】:

  • 适用于 GNU bash,版本 4.1.10(4)-release (i686-pc-cygwin)
  • 我的版本是 GNU bash,版本 4.2.24(1)-release (x86_64-pc-linux-gnu)

标签: bash


【解决方案1】:

C 风格的 for 循环仅适用于少数 shell,而 bash 就是其中之一。这是语法不是 POSIX 标准的一部分。

#!/bin/bash
TOP=10
for ((i=1; i<=$TOP; i++))
do
    echo $i
done

符合 POSIX 的 for 循环如下

#!/bin/bash
TOP=10
for i in $(seq 1 $TOP)
do
    echo $i
done

这在 bash 和 sh 中都有效。

要知道你登录的是哪个shell,执行以下命令

ps -p $$

其中$$是当前进程的PID,当前进程是你的shell,ps -p会打印关于这个进程的信息。

要更改您的登录 shell,请使用 chsh 命令。

【讨论】:

    【解决方案2】:

    您正在使用sh 运行脚本,而不是bash。 试试:

    bash split_history_file_test.sh
    

    【讨论】:

    • 天哪,不知道,谢谢。 sh 不运行 bash 脚本吗?
    • @Krøllebølle Bourne shell (sh) 对 for 循环有不同的语法。 Bash 命令语法是 Bourne shell 命令语法的超集。
    【解决方案3】:

    此代码不会产生该错误。该 ubuntu 版本附带的 bash 版本应该可以毫无问题地执行它。

    注意:你要echo $i

    【讨论】:

    • 回声 $1 只是一个错字,现在已修复。我的脚本仍然会产生上述错误,即使它看起来不应该。
    • 复制粘贴你的脚本。你是怎么执行的?
    • 我现在已经完全复制粘贴到我的脚本中了。该脚本是通过在 bash 中执行“sh file.sh”来运行的,我首先完成了“chmod +x file.sh”。
    • 我放了一张图片来展示我是如何运行文件的。 Ubuntu 使用 VMWare Player 作为虚拟机运行(没关系)。
    猜你喜欢
    • 1970-01-01
    • 2010-09-08
    • 2012-04-04
    • 1970-01-01
    • 2020-09-12
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 2013-06-15
    相关资源
    最近更新 更多