我试图找出是否存在一种更紧凑的方式来编写以下格式的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的思路,您可以只说“ if x in [...]”等,而不需要像上面的情况那样分别将$ VAR与每个数字进行比较。我曾考虑过以下类型的设置,但最终会导致总体上出现更多行。
foreach VAR (`seq 1 24`)
foreach C (1 2 3 4)
if ($C == $VAR) then
set cat = small
endif
end
...
end
如果所提供的代码与tcsh中的代码一样简单,那么bash是否有更简洁的说法?感谢您的提示。
答案 0 :(得分: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)