通过命令行选项覆盖用户定义的变量environment变量。

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

寻找从命令行覆盖一个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中正在使用的默认值。

shell csh tcsh
1个回答
2
投票

脚本中,我应该 "可以选择 "从...覆盖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中编写脚本;有许多注意事项和缺点(例如,见于 这个)而你几乎总是最好使用伯恩壳。

© www.soinside.com 2019 - 2024. All rights reserved.