我正在使用一个具有以下语法的Bash脚本:
这似乎在zsh中是非法的(我得到了一个“没有找到匹配项:THIS [*]”错误)。有人能帮我将其翻译成zsh吗?
另外,[*]语法是什么意思?(我知道我们正在声明一个数组,但为什么要用[*]?)
更新
为了提供代码使用的示例并解释它的有效性,我从Eric Engstrom在password free ssh上的文章中复制了几行。
我认为
$ declare -a THIS[*]
这似乎在zsh中是非法的(我得到了一个“没有找到匹配项:THIS [*]”错误)。有人能帮我将其翻译成zsh吗?
另外,[*]语法是什么意思?(我知道我们正在声明一个数组,但为什么要用[*]?)
更新
为了提供代码使用的示例并解释它的有效性,我从Eric Engstrom在password free ssh上的文章中复制了几行。
declare -a SSSHA_KEYS[*]
# --- PARSE ARGS --- #
sssha_parse_args() {
local OPTIND=1
while getopts "xe:k:t:" OPT; do
#echo "$OPT $OPTARG $OPTIND"
case $OPT in
t) SSSHA_ARGS="-t $OPTARG" ;;
e) SSSHA_ENV="$OPTARG" ;;
k) [ -f "${OPTARG}" ] && SSSHA_KEYS[${#SSSHA_KEYS[*]}]="$OPTARG" ;;
x) SSSHA_STOP_ON_EXIT=$OPT
esac
done
shift $(($OPTIND - 1))
# set default key, if none specified
if [ -z "${SSSHA_KEYS[*]}" ]; then
for key in $HOME/.ssh/id_[rd]sa; do
[ -f "$key" ] && SSSHA_KEYS[${#SSSHA_KEYS[*]}]="$key"
done
fi
}
我认为
[*]
被用作某种动态迭代器(因为我们不知道它将来会有多少项)。我只想知道在zsh中等效的声明!
declare -a SSSHA_KEYS
。根据@ormaaj的解释,这些声明应该是相等的。其他发布的代码可能不需要修改就能正常工作,除了SSSHA_KEYS [ $ {#SSSHA_KEYS [*]}] = smth
:它将添加一个键,我是对的吗?使用SSHA_KEYS + =(smth)
,因为在zsh数组索引从1开始,ARR [ARR_LENGTH]
将分配给最后一个项目,而不是在其后面。 - ZyX