Shell 使用sh脚本时出错

Shell 使用sh脚本时出错,shell,sh,Shell,Sh,由于bashshell不可用的限制,我正在使用shshell。下面这段代码在bashshell上运行正常,但在shshell上运行时抛出错误 if [[ -n $(grep -i "${RSA_BACKUP[iter]}: OK" $BACKUP_HASH_TRACK) ]] 错误:/etc/backup\u infra.sh:第79行:语法错误:错误替换 您尝试运行的脚本需要Bash(至少版本4.0)。这是因为它使用 关联数组(${RSA_BACKUP[iter]}) […]而不是[…]

由于
bash
shell不可用的限制,我正在使用
sh
shell。下面这段代码在
bash
shell上运行正常,但在
sh
shell上运行时抛出错误

if [[ -n  $(grep -i "${RSA_BACKUP[iter]}: OK" $BACKUP_HASH_TRACK) ]]
错误:/etc/backup\u infra.sh:第79行:语法错误:错误替换


您尝试运行的脚本需要Bash(至少版本4.0)。这是因为它使用

  • 关联数组(
    ${RSA_BACKUP[iter]}
  • […]
    而不是
    […]
  • 如今,许多shell使用
    [[…]]
    语法,有些shell,如
    bash
    ,即使作为
    sh
    调用,也能够理解它。然而,
    破折号
    ash
    炮弹却没有

    但主要问题是关联数组。你现在面临的问题是

  • 完全重写脚本以避免数组和关联数组,或
  • 安排安装编写此脚本的
    bash

  • 您使用的变量值是什么?如果没有这些正确的值,您的输入将无法验证,因此无法提供正确的解决方案。您的代码中有两个元素是bashism,在POSIX外壳中无法工作(假设您的
    sh
    是POSIX,您尚未确认)。第一个是
    [[
    。与其使用此方法,不如重写脚本以使用传统测试。
    man test
    了解平台上可用的详细信息。第二个是使用数组。Bash支持数组。POSIX shell不支持数组。如果需要帮助编写解决此问题的方法,您需要在问题中提供更详细的上下文。@ghoti:n同意你的意见。正如你所看到的,OP的帖子至少是无法验证的,我们不知道他的要求是什么,他对变量的值是什么(我甚至发表了一条评论,要求提供信息),但我能提供的关于这些信息的最起码的建议/帮助是建议使用[我这样做了]@Indra:如果你让我们知道变量的值是什么(或者)你对特定的
    If
    构造的意图是什么,我们可以帮助你处理与你的代码等价的
    sh
    。好的,我有一个字符串数组,它是RSA\u BACKUP[],现在我需要找到下面的“RSA\u BACKUP[idx]:好的在文件中遍历文件列表时