所以我现在很困惑,因为我是bash的新手,我不确定如何解决这个问题。
#!/bin/bash
declare -a cards=(null SA HA DA CA SK HK DK CK SQ HQ DQ CQ SJ HJ DJ CJ ST HT DT CT S9 H9 D9 C9 S8 H8 D8 C8 S7 H7 D7 C7 S6 H6 D6 C6 S5 H5 D5 C5 S4 H4 D4 C4 S3 H3 D3 C3 S2 H2 D2 C2)
declare -a cardsNamed
for i in "$@"
do
cardsNamed+=' '${cards[i]}
done
echo The hand is $cardsNamed
我需要$ cardsNamed数组按照第一个数组元素的顺序对卡片进行排序。例如,如果cardsNamed有SJ HA DK。它会分类为HA DK SJ。
对于某些背景。这是一款纸牌游戏,通过解析参数显示您选择的牌,然后排序和丢弃对。
真的很感激我能得到的所有帮助。感谢
答案 0 :(得分:0)
假设你的参数是数组和数组的有效索引,我可以想到两种方法:
#!/bin/bash
declare -a cards=(null SA HA DA CA SK HK DK CK SQ HQ DQ CQ SJ HJ DJ CJ ST HT DT CT S9 H9 D9 C9 S8 H8 D8 C8 S7 H7 D7 C7 S6 H6 D6 C6 S5 H5 D5 C5 S4 H4 D4 C4 S3 H3 D3 C3 S2 H2 D2 C2)
for i
do
cardsNamed+=' '${cards[i]}
done
set -- $(printf "%d\n" "$@" | sort -n)
for i
do
cardsNamedSorted+=' '${cards[i]}
done
echo The hand is $cardsNamed
echo The sorted hand is $cardsNamedSorted
如果您不想覆盖参数,也可以for i in $(printf "%d\n" "$@" | sort -n)
而不是使用set
。
#!/bin/bash
declare -a cards=(null SA HA DA CA SK HK DK CK SQ HQ DQ CQ SJ HJ DJ CJ ST HT DT CT S9 H9 D9 C9 S8 H8 D8 C8 S7 H7 D7 C7 S6 H6 D6 C6 S5 H5 D5 C5 S4 H4 D4 C4 S3 H3 D3 C3 S2 H2 D2 C2)
declare -a cardsNamedSorted
for i
do
cardsNamed+=' '${cards[i]}
cardsNamedSorted[i]=${cards[i]}
done
echo The hand is $cardsNamed
echo Sorted hand: "${cardsNamedSorted[@]}"
cardsNamedSorted
只会包含指定的条目,其顺序与cards
相同。
注意:
for i
的in <something>
与for i in "$@"
相同。cardsNamed
声明为数组,但其用法类似于普通变量。