遵从
https://stackoverflow.com/questions/1809899/how-can-i-assign-the-output-of-a-function-to-a-variable-using-bash和 如何将命令的输出分配给变量?
我写
function getos(){
# http://stackoverflow.com/a/27776822/1637673
case "$(uname -s)" in
Darwin)
OS='mac'
;;
Linux)
OS='linux'
;;
CYGWIN*|MINGW32*|MSYS*)
OS='win'
;;
# Add here more strings to compare
# See correspondence table at the bottom of this answer
*)
OS='other'
;;
esac
echo $OS
}
echo $(getos)
OS=${getos}
echo ${OS} # show nothing
echo $OS # show nothing
echo $(OS) # line 36
但
bash common.sh
得到了
linux
common.sh: line 36: OS: command not found
有什么问题 ??
答案1
根本问题是,OS=${getos}
预计getos
多变的,而不是函数(它是参数扩展而不是命令替换) - 它们实际上是不同的命名空间:
$ function foo() { echo foo; }
$ foo
foo
$ echo ${foo}
$
(IE多变的 foo
为空);而
$ foo=bar
$
$ foo
foo
$ echo ${foo}
bar
如果你想OS
成为的同义词getos
,你可以使用别名:
alias OS='getos'
(尽管如果您在脚本中使用它,请注意别名扩展仅在交互式 shell 中默认启用)。
TL;DR:圆括号和大括号不可互换