我习惯在 bash 脚本中执行类似的操作以将输出回显到变量:
myvar=`echo $OSTYPE`
echo "my os is of type: ${myvar}"
然而,在当前的项目中,我使用的是 sh,它在我的 Ubuntu 实例上似乎没有符号链接到 bash。我这么说是因为${myvar}
当我在顶部有 /bin/sh shebang 时,上面的代码没有任何回显。
所以我认为echo $OSTYPE
这不是 sh 的出路?如果没有,我该如何做类似的事情? (我尝试过回显$(myvar)
,但也没有成功。)
答案1
以下似乎在我的中工作得很好sh
:
$ myvar="test"
$ echo "My var is $myvar."
My var is test.
无需获取echo
变量的值并在另一个变量中再次捕获它。这是有关变量分配的更多信息。
事情是,OSTYPE
未在sh
的环境中定义。运行脚本时您必须传递它。所以,与其跑...
$ /bin/sh yourscript.sh
or
$ ./yourscript.sh
你应该运行:
$ OSTYPE=$OSTYPE /bin/sh yourscript.sh
or
$ OSTYPE=$OSTYPE ./yourscript.sh
当然,这假设您在其中键入上述命令的父 shell 有一个OSTYPE
变量。虽然bash
确实如此,但并非每个 shell 都是如此。然而$OSTYPE
,您可能可以使用uname
:
$ OS=$(uname -o)
$ echo "My OS is $OS."
My OS is GNU/Linux.
$ echo "My OS is $(uname -o)."
My OS is GNU/Linux.
在我的机器上,这将OS
变量设置为GNU/Linux
, 而不是linux-gnu
(这是 my 的内容OSTYPE
)。
作为旁注,我猜你的代码的等价物可能是:
$ myvar="$(echo $OSTYPE)"
$ echo "My var is $myvar."
My var is linux-gnu