【发布时间】:2015-10-03 06:04:16
【问题描述】:
我正在使用具有以下语法的 bash 脚本
$ 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中的等效声明!
【问题讨论】:
-
“(哦,我的)”是什么意思?!
-
没有办法控制数组在 zsh 中可以占用多少空间(除非您愿意将其设为只读),因此请尝试使用
declare -a SSSHA_KEYS。相信@ormaaj 的解释,这些声明应该是平等的。除了SSSHA_KEYS[${#SSSHA_KEYS[*]}]=smth之外,其他发布的代码可能无需修改即可工作:它将添加一个密钥,对吗?使用SSHA_KEYS+=( smth ),因为 zsh 数组索引从 1 开始,ARR[ARR_LENGTH]将分配给最后一项,而不是在它之后。