TCSH - 用于检查数组/列表中的值是否最紧凑的语法?

问题描述 投票:0回答:1

我试图找出是否有一种更紧凑的方式来编写以下格式的tcsh代码,理想情况下仍然在tcsh中。我花了一段时间搜索使用不同的关键字,但找不到任何有用的东西。

本质上,代码片段只是通过数字序列循环,然后如果该循环值在一组数字内,则分配一个变量。为简单起见,我已经将$ VAR的数字列表与相对较短的数据进行了比较,并且比较事件的数量很少,但实际问题是两个方面的尺寸的两倍。

foreach VAR (`seq 1 24`)
    if ($VAR == 1 || $VAR == 2 || $VAR == 3 || $VAR == 4) then 
        set cat = small
    else if ($VAR == 5 || $VAR == 6 || $VAR == 7 || $VAR == 8) then
        set cat = medium
    else
        set cat = large
    endif
end

我想我更多地考虑python,你只能说“如果x在[...]”等,而不是像上面的情况那样需要将$ VAR与每个数字进行单独比较。我考虑过以下类型的设置,但最终会有更多的线路。

foreach VAR (`seq 1 24`)
    foreach C (1 2 3 4)
        if ($C == $VAR) then
            set cat = small
        endif
    end
    ...
end

如果提供的代码与tcsh中的代码一样简单,那么bash有更简洁的方法吗?谢谢你的任何提示。

tcsh
1个回答
0
投票

我担心在tcsh你不会保存任何线路:

#/bin/tcsh
foreach VAR (`seq 1 24`)
  if (${VAR} < 5) then
    set cat = "small"
  else if (${VAR} > 8) then
    set cat = "large"
  else
    set cat = "medium"
  endif
end
exit(0)

你也可以考虑将逻辑传递给AWK(我不知道你的情况是否有帮助):

#/bin/tcsh
foreach VAR (`seq 1 24`)
  set cat = (`echo ${VAR} | awk '$0<5 {print("small"); exit;} $0>8 {print("large"); exit;} {print("medium");}'`)
end
exit (0)
© www.soinside.com 2019 - 2024. All rights reserved.