寻找从命令行覆盖一个c-shell变量的方法。在下面的脚本(test.csh)中,FOO的默认值是0。"可选" 能够从命令行覆盖FOO的值。
#!/bin/csh
setenv FOO 0
if (${FOO}) then
echo "Hello"
else
echo "World"
endif
在cshtcsh的手册页中,有一个-D变量[=值] 会这样做。所以我在命令行上试了一下下面的内容,我以为它会打印 "Hello",结果却打印了 "World"--这意味着-DFOO=1没有生效。相反,它打印了 "World"--这意味着-DFOO=1没有生效。
unix-prompt> ./test.csh -DFOO=1
我不想使用#argv这个东西,然后解析args,并根据args适当地设置环境变量。对我来说,并没有强迫我使用setenv。
期望使用命令行覆盖,覆盖c-shell中正在使用的默认值。
脚本中,我应该 "可以选择 "从...覆盖FOO的值。-D
选项被记录在 tcsh(1)
作为。
-Dname[=value]
Sets the environment variable name to value. (Domain/OS only) (+)
我猜你没有运行DomainOS :-)
你可以用 env
为一个命令设置一个变量,比如说。
$ env FOO=1 ./a.csh
注意,在你的脚本中,你总是在覆盖 FOO
将要 0
所以你需要修改它来覆盖它,只是在它没有设置的时候。
if (! $?FOO) setenv FOO 0
作为后记,我应该指出,如果可以避免的话,一般不鼓励在csh中编写脚本;有许多注意事项和缺点(例如,见于 这个)而你几乎总是最好使用伯恩壳。