echo {1..$1}写法在脚本中失效问题

[11:33:04 root@centos7 data]#cat test1.sh
#!/bin/bash
echo {1..$1}
echo {1..9}

[11:30:55 root@centos7 data]#./test1.sh 9
{1..9}
1 2 3 4 5 6 7 8 9

接收变量后为什么无法正确显示呢。

阅读 4.7k
3 个回答

参见 man bash

A sequence expression takes the form {x..y[..incr]}, where x and y are either integers or single characters, and incr , an optional increment, is an integer. ......

Brace expansion is performed before any other expansions, ......

这个展开发生在替换 $1 之前,此时它并不符合这一展开的形式。于是没有展开。

你这个可以用 seq 命令实现:

echo $(seq -s " " 1 $1)

shell的解释顺序了解下先。

加点东西:
`#!/bin/bash
eval echo {1..$1}
echo {1..9}`

新手上路,请多包涵

有必要学习一下基础的shell,共勉

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进