我设置了以下数组循环。它只是简单地循环遍历字符串,并检查每个项目是否与字母匹配,并相应地设置一些变量。
#!/usr/bin/env bash
IN="ItemName -a -b"
itemA=0
itemB=0
itemI=0
while IFS=' -' read -ra ARR; do
for x in "${ARR[@]}"; do
echo "x = $x"
y=${x:0:1}
echo "y = $y"
case $y in
"a") itemA=1 ;;
"b") itemB=1 ;;
"I") itemI=1 ;;
esac
done
done <<< "$IN"
echo "itemA is $itemA
echo "itemB is $itemB"
echo "itemI is $itemI"
但是,对于第一个元素(“ itemName”),我需要单独设置此元素,以便不作为大小写检查的一部分对其进行检查。理想情况下,我希望最终得到:
itemName is ItemName
itemA is 1
itemB is 1
itemI is 0
如何检查第一个元素?我试过了
if [ ${ARR[0]} ] ; then
itemName=$x
else
. . .
fi
但最终没有设置任何变量。
我不明白您为什么要使用while
循环。松开while
,您的问题就消失了:
#!/usr/bin/env bash
IN="ItemName -a -b"
itemA=0
itemB=0
itemI=0
## Read the array, no loop required
IFS=' -' read -ra ARR <<<"$IN"
## Save the 1st element as itemN
itemN=${ARR[0]}
## Remove itemN from the array
unset ARR[0]
## Now loop over the rest
for x in "${ARR[@]}"; do
y=${x:0:1}
case $y in
"a") itemA=1 ;;
"b") itemB=1 ;;
"I") itemI=1 ;;
esac
done
echo "itemN is $itemN"
echo "itemA is $itemA"
echo "itemB is $itemB"
echo "itemI is $itemI"
运行上面的脚本可以打印:
itemN is ItemName
itemA is 1
itemB is 1
itemI is 0
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句