2017-01-03 49 views
0

由于限制了bash shell的不可用性,我使用了sh shell。下面的一段代码在bash外壳上运行正常,但在sh外壳上运行时会引发错误。使用sh脚本时出错

if [[ -n $(grep -i "${RSA_BACKUP[iter]}: OK" $BACKUP_HASH_TRACK) ]] 

error: /etc/backup_infra.sh: line 79: syntax error: bad substitution

+0

你正在使用的变量的值是多少?如果没有这些适当的价值,你的投入是不可核实的,因此不能提供适当的解决方案。 – Inian

+3

你的代码有两个元素,它们是bashisms,不能在POSIX shell中工作(假设你的'sh'是POSIX,你还没有确认)。第一个是'[['。不要使用它,请重新编写脚本以使用传统测试。有关您的平台上可用内容的详细信息,请参阅“man test”。第二个是你使用数组。 Bash支持数组。 POSIX shell不。如果你需要帮助编码解决这个问题,你需要在你的问题中提供更好的背景。 – ghoti

+0

@ ghoti:完全同意你的意见。正如你所看到的,OP的帖子是无法证实的,我们不知道他的要求是什么,他对变量的价值是什么(我甚至发布了一条要求提供信息的评论),但对这些信息的最少建议/帮助我可以给推荐使用[我这样做 – Inian

回答

0

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

  1. 关联数组(${RSA_BACKUP[iter]})。
  2. [[ ... ]]而不是[ ... ]

许多炮弹使用[[ ... ]]语法时下,有的像bash,都能够理解它,即使他们被援引为sh。然而,dashash炮弹没有。

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

  1. 完全重写剧本,以避免这两个数组和关联数组,或
  2. bash安装了此剧本的作者安排。