gpt4 book ai didi

bash - 如何在 Bash 中引用名称中具有不同数字的数组?

转载 作者:行者123 更新时间:2023-12-05 03:22:12 25 4
gpt4 key购买 nike

(如果我的英语不好请提前道歉)

所以,我开始研究 bash,想用它做一个 Connect 4 游戏。但是,我有点卡住了。我有 7 个名为 column0 到 column6 的数组,我想稍后引用它们。

几天前我在另一篇文章中读到,我可以使用 nameref 来这样做,但我认为我做错了什么,因为函数运行,但没有做任何事情(不检查赢家).这是代码片段

declare -n nr="column$j"
for ((j=0 ; j < 6; j++ )); do
if [ "${nr[0]}" = $k ] && [ "${nr[1]}" = $k ] && [ "${nr[2]}" = $k ] && [ "${nr[3]}" = $k ]; then

(这是将检查获胜者的函数的一部分,以防一行中的 4 个字符匹配。'k' 只是一个颜色变量,它可以是 $k='Y' 或 $k ='R')

有人可以指出我在这里做错了什么吗?或者我只是愚蠢而 Bash 不能使用这样的解决方案?提前感谢您的帮助。

最佳答案

鉴于您的规范,我尝试重现一个最小示例。
你可以尝试做这样的事情:

#!/usr/bin/env bash

k="Y"

nr_0=("R" "R" "Y" "Y")
nr_1=("R" "Y" "Y" "Y")
nr_2=("Y" "R" "Y" "Y")
nr_3=("Y" "Y" "R" "Y")
nr_4=("Y" "Y" "Y" "R")
nr_5=("Y" "Y" "Y" "Y") # the winner
nr_6=("Y" "R" "Y" "Y")

for j in {0..6}; do
tmp_array_name="nr_$j[@]"
tmp_array=("${!tmp_array_name}")

if [ "${tmp_array[0]}" == "$k" ] && [ "${tmp_array[1]}" == "$k" ] && [ "${tmp_array[2]}" == "$k" ] && [ "${tmp_array[3]}" == "$k" ]; then
echo "The winner is $tmp_array_name - ${tmp_array[*]}"
fi
done

有了这个输出:
获胜者是 nr_5[@] - Y Y Y Y

关于bash - 如何在 Bash 中引用名称中具有不同数字的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72785366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com