linux 如何检查CSH中是否设置了环境变量?

ni65a41a  于 2023-10-16  发布在  Linux
关注(0)|答案(3)|浏览(204)

我写一个CSH脚本,我需要检查是否环境变量XYZ或ABC设置或不设置在终端。
如果设置了这些变量,那么我需要检查它们中是否有任何一个被设置为“”。我尝试如下:

if ( !($?ABC) ) then

   echo "variable is not set"

else if ( $ABC == "FALSE") then

   echo "variable set to false"                

endif

但是CSH首先替换了变量。所以我得到下面的错误:
ABC:未定义的变量
你能帮我解决这个问题吗?

f0ofjuux

f0ofjuux1#

$?ABC在未设置时计算为0,在设置时计算为1

#!/bin/csh

if ($?ABC) then
  echo "ABC is set"
else
  echo "ABC is not set"
endif
u7up0aaq

u7up0aaq2#

这个答案:https://stackoverflow.com/a/22640299/7332147
说“嵌套的if是为了避免破坏脚本,因为tcsh显然不会短路”。
它的例子(假设有效)是:

if (! $?var) then       
  echo "variable is undefined"
else
  if ("$var" == "")  then
      echo "variable is empty"
  else 
      echo "variable contains $var"
  endif
endif

和你的略有不同
可能,解决这个问题的简单方法是使用单个IF来测试ABC,如果没有设置,则将其设置为某个无效值:

if (! $?ABC) then
  echo "variable is undefined"
  setenv ABC "-"
endif

(just我的两分钱,我不是CSH的大师)。

avkwfej4

avkwfej43#

如果你在脚本中定义变量,应该没有问题。

set ABC = FALSE
if ( ! $?ABC  ) then

   echo "variable is not set"

else if ( $ABC == "FALSE") then

   echo "variable set to false"

endif

echo "ABC is still: $ABC"

产出:

variable set to false
ABC is still: FALSE

同样,如果你使用setenv在脚本外部定义了一个变量,它将与你的脚本一起工作。

setenv ABC FALSE
./your_script.sh

产出:

variable set to false
ABC is still: FALSE

更好的方法是使用命令行参数。传递变量到你的脚本是一个比setenv更好的解决方案。

相关问题