我正在尝试查看数组中是否存在第一个参数:
#!/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 ] 以查明是否传递了参数。