Cha*_*les 14 arrays bash posix sh
在替换shell脚本中的外部命令时,我使用了一个数组来摆脱awk NF.
现在,由于我从bash转移到POSIX sh,我无法将数组标记为正确:
#!/bin/bash
export RANGE="0 1 4 6 8 16 24 46 53"
RANGE=($RANGE)
echo arrayelements: $((${#RANGE[@]}))
LAST=$((${#RANGE[@]}-1))
echo "Last element(replace NF): ${RANGE[$LAST]}"
# ./foo
arrayelements: 9
Last element(replace NF): 53
Run Code Online (Sandbox Code Playgroud)
我正在使用OpenBSD,sh和它的大小与ksh完全相同.更改为以上/bin/sh,似乎以下不起作用:
set -A "$RANGE"
set -- "$RANGE"
Run Code Online (Sandbox Code Playgroud)
我怎么能实现上面的脚本/bin/sh?(注意,如果你调用bash,它可以正常工作--posix,那不是我想要的.)
Mat*_*ery 23
数组不是POSIX sh规范的一部分.
还有其他各种方法可以找到最后一项.几种可能性:
#!/bin/sh
export RANGE="0 1 4 6 8 16 24 46 53"
for LAST_ITEM in $RANGE; do true; done
echo "Last element(replace NF): $LAST_ITEM"
Run Code Online (Sandbox Code Playgroud)
要么:
#!/bin/sh
export RANGE="0 1 4 6 8 16 24 46 53"
LAST_ITEM="${RANGE##* }"
echo "Last element(replace NF): $LAST_ITEM"
Run Code Online (Sandbox Code Playgroud)
您可以使用 Github 中的以下项目,该项目实现了符合 POSIX 标准的数组,该数组适用于我尝试过的所有 shell:https : //github.com/makefu/array
使用起来不是很方便,但我发现它很适合我的目的。