【问题标题】:tcsh script if statementtcsh 脚本 if 语句
【发布时间】:2013-11-05 21:09:35
【问题描述】:

我需要遍历一堆不同的场景(可变场景),但不知道如何在 tcsh shell 脚本中使用 if 语句。收到错误“如果:表达式语法”有人可以告诉我我有什么问题吗?简化代码如下!谢谢!

#!/bin/tcsh -f
#
set val = 0

foreach scen ( a b )

echo $scen

if ($scen==a) then
  echo $scen
else
  echo $val
endif
end

【问题讨论】:

  • 我尝试在 foreach 语句中添加方括号代替括号,但出现错误“foreach: Words not parenthesized”
  • 尝试在 if 语句中添加方括号代替括号并得到错误“[a==a]: No match.”
  • 方括号是 sh/bash/ksh/zsh 语法,不是 csh/tcsh。

标签: shell tcsh


【解决方案1】:

解决您的问题

显然你需要在相等比较 == 周围留空格。这个 作品:

#!/bin/tcsh -f
#
set val = 0

foreach scen ( a b )

echo $scen

if ($scen == a) then
  echo $scen
else
  echo $val
endif
end

制作:

a
a
b
0

不请自来的建议

另外,除非你必须在这里使用 tcsh,否则我建议使用更好的 像 bash 或 zsh 这样的 shell。以下是反对 csh 和 tcsh 的一些论据:

为了比较,这是您在 bash(和 zsh)中的代码:

#!/bin/bash

# No space around equal sign in assignment!
val=0

for scen in a b; do
  echo $scen

  if [[ $scen == a ]]; then
    echo $scen
  else
    echo $val
  fi
done

这里没有重要区别,但请参阅上面的文章 csh 将是一个糟糕的选择的示例。

【讨论】:

    猜你喜欢
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-26
    • 2019-08-15
    • 2015-06-16
    • 1970-01-01
    相关资源
    最近更新 更多