我有一个如下所示的数组:
# echo "${ARRAY[@]}"
1=Napp Slice
4=NNN Issue
3=GG Allow
2=CO-OP
1=Quit
我想遍历它以查看是否有任何包含该单词Quit
,如果是,则将该元素设置为一个变量。所以我跑到下面:
for x in ${ARRAY[@]}; do
if [ $x == *Quit* ]; then
FOO=$x
echo $FOO
else
break
fi
done
我想返回给我1=Quit
,但是当我运行它时,我得到:
# ./myScript.ksh
1=Napp Slice
4=NNN Issue
3=GG Allow
2=CO-OP
1=Quit
我怎样才能只取出包含的元素Quit
?
在发布之前,我真的想看看这个问题是否存在,我对 shell 脚本比较陌生。我确信我缺少一些非常简单的东西,但我似乎无法理解。
请仅使用 KSH 语法,因为这就是我可以使用的全部内容。
编辑:我仍然需要弄清楚如何删除找到的元素
谢谢!
当我尝试使用 运行您的脚本时出现错误
ksh93
,主要是因为==
在[ ... ]
. 我不清楚您使用的是什么外壳。break
只要您不匹配模式,您也会立即执行,这意味着您可能只运行循环的一次迭代。目前尚不清楚输出数组的内容,但很可能不是您显示的代码。ksh93
在任何情况下,以下脚本都会在shell中执行您想要的操作(bash
事实证明,并且zsh
):注意
[[ ... ]]
与模式匹配运算符的使用==
。此外,请小心引用扩展名,${array[@]}
以便单独引用每个元素,而不是在空格上拆分。在评论中,您说要从数组中删除元素。如果您循环遍历数组的元素,则不能这样做,但如果您改为遍历数组的索引,则可以取消设置元素。
请注意,这可能会在某处为您提供一个“缺少”元素的数组,并且数字索引不再是连续的。
下面的代码大致再现了上面第二个代码块的作用,但
sh
添加了一些额外的功能。在这里提供它纯粹是为了我们自己的娱乐。