乘变量范围使用bash括号扩展 [英] Multiply variable ranges with Bash brace expansion

查看:144
本文介绍了乘变量范围使用bash括号扩展的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经在延长<一的code的一个问题href=\"http://stackoverflow.com/questions/5690102/how-can-i-make-a-multiplication-table-using-bash-brace-expansion-so-far-i-have-t\">this问题:你可以将两个变量的取值范围在使用bash括号扩展(而不是 SEQ ),而不是使用循环

这是我到目前为止已经试过

工作出界如何变量的工作范围(最后一个良好的使用评估

  $ {回声} 1..10
1 2 3 4 5 6 7 8 9 10
$边界= 10
$回声{1 .. $边界}
{} 1..10
$ EVAL回声{1 .. $边界}
1 2 3 4 5 6 7 8 9 10

但你怎么能乘两个变量的边界范围?

  $回声$(({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 10 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
$边界= 10
$回声$(({1 .. $边界} * {1 .. $边界}))
庆典:{1..10} * {} 1..10:语法错误:预期操作数(错误标记是{1..10} * {1..10})
$ EVAL回声$(({1 .. $边界} * {1 .. $边界}))
庆典:{1..10} * {} 1..10:语法错误:预期操作数(错误标记是{1..10} * {1..10})


解决方案

这似乎工作,才躲过了 $ [] 来推迟自己的评价(使他们回荡,然后评估)

  EVAL回声\\ $ \\ [{1 .. $边界} * {1 .. $边界} \\]

这是说我现在需要去查找什么 $ [] 做的事情; - )


第二个答案,与非德precated $ [] 语法(但有两个evals)

EVAL EVAL回声\\ $ \\(\\({1 .. $边界} * {1 .. $边界}\\)\\)

EVAL EVAL回声\\\\\\ $ \\\\\\(\\\\\\({1 .. $边界} * {1 .. $边界} \\\\\\)\\\\\\)

I've a question extending the code in this question: Can you multiply two variable ranges in Bash using brace expansion (not seq) and not using loops?

This is what I've tried so far

Work out how variable boundary ranges work (finally, a good use of 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

But how can you multiply two variable boundary ranges?

$ 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}")

解决方案

this seems to work, just escaped the $ and [] to delay their evaluation (so that they are echoed, then evaluated)

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

That said I now need to go lookup what $[] does ;-)


Second answer, with non deprecated $[] syntax (but two evals)

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

or

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

这篇关于乘变量范围使用bash括号扩展的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆