变量通过脚本中不可用的环境传递

时间:2015-06-08 15:16:49

标签: linux bash shell

我正在尝试编写if / elif / else语句,如果变量等于“Full”,它将捕获一个文件,如果相同的变量等于“Quick”,它将读取一个不同的较小文件。该变量在脚本之外设置,并由export var1=Quick

导出

我有

#!/bin/sh
echo $var1
export $var1=var1
{
#try cat-ing the file. If it cannot be read, exit with error. 
if [ "$var1" = "Full" ];
then 
echo "Full read chosen"
cat foo
exit 0
elif [ "$var1" = "Quick" ];
then
echo "Quick read chosen"
cat bar
exit 0
else
echo "Please choose quick or full"
exit 1
fi
}

当我尝试通过调用./test来运行脚本时,似乎没有设置变量

+ '[' '' = Full ']'
+ '[' '' = Quick ']'
+ echo 'Please choose quick or full'
Please choose quick or full
+ exit 1

是否有原因,即使变量是在脚本之外导出的,变量也没有传递给脚本?

2 个答案:

答案 0 :(得分:2)

以下绝对可行:

$ export var1=Quick
$ ./yourscript

...其中yourscript是相关脚本。

因此,您的问题需要进行调整,以包含足够的信息和细节来重现问题。

顺便说一句,你的脚本会更好地编写:

#!/bin/sh
case $var1 in
  Full)
    echo "Full read chosen" >&2
    cat foo
    ;;
  Quick)
    echo "Quick read chosen" >&2
    cat bar
    ;;
  *)
    echo "Please choose quick or full" >&2
    exit 1
    ;;
esac
exit 0

以下两项工作都适用于我:

$ var1=Quick ./yourscript
Quick read chosen
cat: bar: No such file or directory
$ (export var1=Quick; ./yourscript)
Quick read chosen
cat: bar: No such file or directory

答案 1 :(得分:1)

问题是变量的名称。将$ var1更改为$ 1就可以了。