簡體   English   中英

使用echo生成元素組合

[英]Generate combinations of elements with echo

我需要准備一個簡單的腳本來生成存儲在變量中的一組元素的所有排列,這些元素包含n個元素的組(可以參數化n),想到的最簡單的解決方案是使用幾個循環,具體取決於所選的長度群組。 但我認為利用echo命令生成組合的能力會更優雅,也就是說

echo {1,2}{1,2}
    11 12 21 22

因此,使用此方法,我正在嘗試實現一般方法,使用元素列表(例如{1,2})和元素數作為輸入參數。 它會是這樣的:

set={1,2,3,4}
group=3
for ((i=0; i<$group; i++));
do
  repetition=$set$repetition
done

因此,在這種特殊情況下,在循環結束時,重復變量的值為{1,2,3,4} {1,2,3,4} {1,2,3,4}。 但是我無法使用echo命令找到使用此變量生成組合的方法。 我試過了幾件事:

echo $repetition
echo $(echo $repetition)

我堅持下去,我很感激任何提示或幫助。

如果你需要所有k的k組合,這個組合腳本可以幫助:

#!/bin/bash

POWER=$((2**$#))
BITS=`seq -f '0' -s '' 1 $#`

while [ $POWER -gt 1 ];do
  POWER=$(($POWER-1))
  BIN=`bc <<< "obase=2; $POWER"`
  MASK=`echo $BITS | sed -e "s/0\{${#BIN}\}$/$BIN/" | grep -o .`
  POS=1; AWK=`for M in $MASK;do
    [ $M -eq 1 ] && echo -n "print \\$\${POS};"
    POS=$(($POS+1))
    done;echo`
  awk -v ORS=" " "{$AWK}" <<< "$@" | sed 's/ $//'
done

例:

./combination ⚪ ⛔ ⚫
⚪ ⛔ ⚫
⚪ ⛔
⚪ ⚫
⚪
⛔ ⚫
⛔
⚫

空集也在那里,相信我。

您可以使用:

bash -c "echo "$repetition""
111 112 113 114 121 122 123 124 131 132 133 134 141 142 143 144 211 212 213 214 221 222 223 224 231 232 233 234 241 242 243 244 311 312 313 314 321 322 323 324 331 332 333 334 341 342 343 344 411 412 413 414 421 422 423 424 431 432 433 434 441 442 443 444

或者使用eval而不是bash -c

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM