bash中是否有更简单的方法将环境变量传递给第二个bash脚本?

时间:2019-05-03 01:19:55

标签: bash

在我的环境中:

THE_KEY="Bearer ABCDEFGHI"

这是some_script.sh

#!/bin/sh
./yet_other_script.sh "$(echo $THE_KEY)"

调用yet_other_script.sh使得参数$ 1为Bearer ABCDEFGHI

有没有比"$(echo $THE_KEY)"更简单的方法?

2 个答案:

答案 0 :(得分:2)

替换:

./yet_other_script.sh "$(echo $THE_KEY)"

具有:

./yet_other_script.sh "$THE_KEY"

更多详细信息

考虑包含以下文件的目录:

$ ls file*
file  file1  file2  file3

定义变量:

$ TheKey="a    file?"

现在,请注意echo $TheKey的作用:

$ echo $TheKey
a file1 file2 file3

afile之间的多个空格已合拢。这是单词拆分的结果。另外,字符串已经进行了 pathname扩展,导致file?被文件名替换。

总而言之,除非您明确希望shell执行扩展,否则始终将shell变量放在双引号中:

$ echo "$TheKey"
a    file?

还不是全部:命令替换从命令输出中删除尾随换行符。例如:

$ TheKey=$'abc\n\n\n'
$ echo "$(echo "$TheKey")"
abc
$ 

答案 1 :(得分:2)

有很多方法可以将值从一个脚本传递到另一个脚本:

  1. 作为参数:./script.sh "$key"-该值在$1中以script.sh的形式提供。
  2. 在标准输入上:echo "$key" | ./script.sh-例如,可以使用内置read的命令读取该值。
  3. 作为导出变量:

    export KEY
    ./script.sh
    

    $KEYscript.sh中具有相同的名称。

  4. 传递一个间接引用,例如文件名,其中存储值甚至是赋值(key=value)。

命名约定是故意的:按照约定,大写名称仅应用于导出的变量。