【问题标题】:Chsell with Arrays and Ifs使用数组和 Ifs 进行 Chsell
【发布时间】:2013-07-08 12:40:48
【问题描述】:

我收到一个 if 语句错误,我不熟悉将 CShell 与数组和 if 语句一起使用。

我正在阅读的文件是

FGF 101001011000

我的代码是

#!/bin/csh
foreach year (1999 2000 2001)
foreach month (1 2 3 4 5)
echo "" > $year$month
if ($month == 1) then
    set letter = F
else if ($month == 2) then
    set letter = G
else if ($month == 3) then
    set letter = H
else if ($month == 4) then
    set letter = R
else if ($month == 5) then
    set letter = D
else 
    print "Fail"
endif
@ year2 = $year % 100
awk '{split ($2,b,""); if (b["'$month'"] == 1) print $1"'$letter'""'$year2'"}' fileRead >> newFile  
end
end

月份的值是字符串还是数字,我可以直接将该值与 1 的值进行比较吗?即使我之前说过 set ,我是否每次使用 letter 时都需要包含 set ? if 语句在 CShell 中如何工作? CShell 中的数组是否像在 java 中那样工作?我知道在 java 中我会做第 1 个月,但是,根据我的研究,我读到数组从 1 开始而不是 0。这是真的吗?谁能告诉我为什么会出现 if 错误?

【问题讨论】:

    标签: csh


    【解决方案1】:

    (您的标题是csh,但您已经用rc-shell 标记了它。请注意rc-shell 的关注者数量较少。还有一个稍新的tcsh 变体,它比原创csh,好像还有追随者)

    月份的值是字符串还是数字,我可以直接将该值与 1 的值进行比较吗?

    csh 只有一种数据类型,那就是字符串。您可以调用理解字符串化数字的外部程序,例如 bcdc,当然还有像 awkperlpython 等语言,但是当您将值传递给要工作的程序时on,它是一个字符串。也就是说,您正确地使用了 csh 的@“复杂赋值”语法。

    如果你只是问,你能不能从一个名为 $month 的变量中减去 1,那么答案是肯定的,使用 @ month-=1。 $month = "02" 时会发生什么?,不确定,只要做一个测试,你就会看到;-)。

    即使我之前说过 set,我每次使用 letter 时是否都需要包含 set?

    是的,set 是用于设置变量的 csh 语法的一部分

    if 语句在 CShell 中如何工作?

    ??像任何其他语言一样?你知道他们是如何用另一种语言工作的吗?只有在之前的 if 测试失败时,它们才会被评估(并执行内部代码)。

    CShell 中的数组是否像在 java 中那样工作?我知道在 java 中我会做第 1 个月,但是,根据我的研究,我读到数组从 1 开始而不是 0。这是真的吗?

    我很确定 csh 是一个基于 1 的索引。不幸的是(或没有),我在家里或工作中都无法访问 csh,所以我无法进行简单的测试。只依靠你找到的证据。

    谁能告诉我为什么会出现 if 错误?

    如果没有看到您收到的确切错误消息,将很难判断。也有上下文将是有帮助的。幸运的是,您可以通过使用可用的set -vx 调试/跟踪选项亲自看到这一点。如果脚本在该输出失败的地方可能更明显。或者,如果脚本根本拒绝运行,请注释掉脚本的大部分,只是为了让它运行,然后取消注释逻辑部分,直到找到有问题的代码部分。 (如果您想发布确切的错误消息,请编辑您的问题以包含该消息,请不要作为对此答案的评论发布)。

    IHTH

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-10
      • 1970-01-01
      • 1970-01-01
      • 2014-04-03
      • 2016-08-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多