Bash - 数组元素存在

Bash - 数组元素存在

我正在尝试查看数组中是否存在第一个参数:

#!/bin/bash

action="$1"
actions=( install run )
actionOK=false

for i in "${actions[@]}"
do
    if [ $i=$action ]; then
        actionOK=true
    fi
done

echo $actionOK

if [ $actionOK = false ]; then
    echo "unknown action: $action"
fi

现在尝试时wan27 run,脚本会回显 true,但对于不在数组中的操作(例如 test、foo、bar 或其他操作),它也会回显 true

答案1

我认为您的脚本适用于“安装”,但不适用于“运行”。

你需要做:

for i in "${actions[@]}"
do
  ...
done

这是因为$actions仅扩展到数组的第一个元素。

$ array=( a b c )
$ echo $array
a
$ echo "${array[@]}"
a b c

查看bash 数组文档有关数组如何工作的更多详细信息。

可以使用 ${name[subscript]} 引用数组的任何元素。需要使用括号以避免与 shell 的文件名扩展运算符发生冲突。如果下标是“@”或“*”,则单词将扩展为数组名称的所有成员。

答案2

我尝试了 François Vespa 修改的脚本,它对我来说运行正常,但如果我传递除运行或安装之外的其他内容,它会输出“未知操作:...”。

我看到的唯一错误是当我没有传递任何参数时。您应该检查 [ $# -gt 0 ] 或 [ $# -eq 1 ] 以查明是否传递了参数。

相关内容