Shell脚本而不是Bash中的数组

The*_*zzy 5 linux embedded shell sh

我可能只是放屁了,但是我一生都无法弄清楚如何在shell脚本而不是bash中遍历数组。我确定答案已经在某个地方的stackoverflow上了,但是我找不到不使用bash的方法。对于我的嵌入式目标系统,bash当前不是一个选项。这是我正在尝试执行的示例以及返回的错误。

#!/bin/sh

enable0=1
enable1=1

port=0
while [ ${port} -lt 2 ]; do
    if [ ${enable${port}} -eq 1 ]
        then
        # do some stuff
    fi

    port=$((port + 1))
done
Run Code Online (Sandbox Code Playgroud)

每当我运行此脚本时,都会与if语句一起返回错误“错误替换”。如果你们有什么想法,我将不胜感激。谢谢!

小智 10

a="abc 123 def"

set -- $a
while [ -n "$1" ]; do
    echo $1
    shift
done
Run Code Online (Sandbox Code Playgroud)

通过busybox 1.27.2 ash 输出:

abc
123
def
Run Code Online (Sandbox Code Playgroud)

  • 虽然此代码片段可能会解决问题,但 [包括解释](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) 确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而那些人可能不知道您提出代码建议的原因。 (4认同)

Ell*_*sch 5

BusyBox提供的ash功能不直接提供阵列支持。您可以使用eval类似

#!/bin/busybox sh
enable0=0
enable1=1

for index in 0 1 ; do
  eval assign="\$enable$index"
  if [ $assign == 1 ]; then
    echo "enable$index is enabled"
  else
    echo "enable$index is disabled"
  fi
done
Run Code Online (Sandbox Code Playgroud)