Несколько переменных диапазонов с расширением Bash Brace - PullRequest
1 голос
/ 18 апреля 2011

У меня вопрос о расширении кода в этот вопрос : можете ли вы умножить два переменных диапазона в Bash, используя расширение скобок (не seq) и не используя циклы?

Это то, что я пробовал до сих пор

Выясните, как работают переменные диапазоны границ (наконец, хорошее использование eval):

$ echo {1..10}
1 2 3 4 5 6 7 8 9 10
$ boundary=10
$ echo {1..$boundary}
{1..10}
$ eval echo {1..$boundary}
1 2 3 4 5 6 7 8 9 10

Но как вы можете умножить два переменных граничных диапазона?

$ echo $(({1..10}*{1..10}))
1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30 4 8 12 16 20 24 28 32 36 40 5 10 15 20 25 30 35 40 45 50 6 12 18 24 30 36 42 48 54 60 7 14 21 28 35 42 49 56 63 70 8 16 24 32 40 48 56 64 72 80 9 18 27 36 45 54 63 72 81 90 10 20 30 40 50 60 70 80 90 100
$ boundary=10
$ echo $(({1..$boundary}*{1..$boundary}))
bash: {1..10}*{1..10}: syntax error: operand expected (error token is "{1..10}*{1..10}")
$ eval echo $(({1..$boundary}*{1..$boundary}))
bash: {1..10}*{1..10}: syntax error: operand expected (error token is "{1..10}*{1..10}")

1 Ответ

4 голосов
/ 18 апреля 2011

это, кажется, работает, просто избежал $ и [], чтобы задержать их оценку (чтобы они отображались, а затем оценивались)

eval echo \$\[{1..$boundary}*{1..$boundary}\]

Тем не менее, мне нужно посмотреть, что делает $[] -)


Второй ответ, с не осуждаемым синтаксисом $[] (но два доказательства)

eval eval echo "\$\(\("{1..$boundary}*{1..$boundary}"\)\)"

или

eval eval echo \\\$\\\(\\\({1..$boundary}*{1..$boundary}\\\)\\\)

...