【问题标题】:Generating sequential number lists in tcsh在 tcsh 中生成序列号列表
【发布时间】:2010-10-13 07:34:30
【问题描述】:

我一直在尝试找到一种解决方法来在 tcsh 中广泛定义序列号列表,即。而不是这样做:

i = ( 1 2 3 4 5 6 8 9 10 )

我想做这样的事情(知道这行不通)

i = ( 1..10 )

这在 foreach 循环中特别有用(我知道我可以使用 while,只是想寻找替代方案)。

环顾四周,我发现了这个:

foreach $number (`seq 1 1 9`)
...
end

发现here。他们说它会生成一个以 1 开头的数字列表,以 1 为增量以 9 结尾。

我试过了,但是没有用。显然 seq 不是命令。它是否存在或者这完全是错误的?

还有其他想法吗?

【问题讨论】:

  • 你有什么理由需要坚持使用 tcsh 吗?你可以用 bash 代替吗?

标签: scripting shell csh tcsh


【解决方案1】:

seq 肯定存在,但可能不在您的 系统上,因为它不在 POSIX 标准中。我刚刚注意到您的命令中有两个错误。以下是否有效?

foreach number ( `seq 1 9` )
    echo $number
end

请注意省略了美元符号和seq 命令周围的额外反引号。

如果这仍然不起作用,您可以用awk 模拟seq

foreach number ( `awk 'BEGIN { for (i=1; i<=9; i++) print i; exit }'` )

更新

另外两种选择:

  1. 如果您的机器没有seq,它可能有jot (BSD/OSX):

    foreach number ( `jot 9` )
    

    我以前从未听说过jot,但它看起来像seq 的类固醇。

  2. 使用带有内置大括号扩展的bash

    for number in {1..9}
    

【讨论】:

  • 是的,我注意到缺少 $,仍然没有工作。正在寻找比您显示的 awk 命令更简单的东西,但将来会记住它。还是谢谢!
  • @Thomas:你用的是什么操作系统?我注意到我的 Mac 安装了 seq 的 GNU 版本为 gseq,也许你的系统上有类似的东西。祝你好运!
  • @Thomas:我是通过MacPorts 的 coreutils 包获得的。但是您应该有jot 可供选择。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-29
  • 1970-01-01
  • 2012-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多