gpt4 book ai didi

bash - Busybox sh 不会执行 bash 脚本

转载 作者:行者123 更新时间:2023-12-02 17:07:39 45 4
gpt4 key购买 nike

我有一个名为 test.sh 的小脚本,它根据给定的索引打印值。

#!/bin/sh
days_in_month=(0 31 28 31 30 31 30 31 31 30 31 30 31)
echo "${days_in_month[$1]}"

如果我使用 bash 执行,上面的代码工作正常。

$ bash test.sh 1
31

但我需要在一个嵌入式板中执行相同的脚本,该板具有 sh 作为 Busybox 包的一部分。当我在那个板上运行命令时,它会抛出一个错误。

$ sh test.sh
test.sh: line 2: syntax error: unexpected "("

我观察到当我在 Ubuntu 系统中使用 dash 而不是 bash 时会抛出同样的错误。

$ dash test.sh
test.sh: line 2: syntax error: unexpected "("

有什么方法可以更改代码,使 Busybox sh 执行时不会出现任何错误?

最佳答案

busybox 的 sh(即 ash)和 dash 都支持数组。

您可以编写一个大的 if-else 或 switch case 语句,或者使用以下技巧。我们使用以空格作为分隔符的单个字符串来模拟一个数组。

cut -d ' ' -f "$1" <<< "31 28 31 30 31 30 31 31 30 31 30 31"

或者更便携:

echo "31 28 31 30 31 30 31 31 30 31 30 31" | cut -d ' ' -f "$1"

另一种解决方法是滥用脚本的位置参数,如 this answer 中所示。 .

关于bash - Busybox sh 不会执行 bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50832481/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com