在我的环境中:
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)"
更简单的方法?
答案 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
a
和file
之间的多个空格已合拢。这是单词拆分的结果。另外,字符串已经进行了 pathname扩展,导致file?
被文件名替换。
总而言之,除非您明确希望shell执行扩展,否则始终将shell变量放在双引号中:
$ echo "$TheKey"
a file?
还不是全部:命令替换从命令输出中删除尾随换行符。例如:
$ TheKey=$'abc\n\n\n'
$ echo "$(echo "$TheKey")"
abc
$
答案 1 :(得分:2)
有很多方法可以将值从一个脚本传递到另一个脚本:
./script.sh "$key"
-该值在$1
中以script.sh
的形式提供。echo "$key" | ./script.sh
-例如,可以使用内置read
的命令读取该值。作为导出变量:
export KEY
./script.sh
$KEY
在script.sh
中具有相同的名称。
key=value
)。命名约定是故意的:按照约定,大写名称仅应用于导出的变量。