将 echo 输出的内容保存到非 bash 脚本中的变量

将 echo 输出的内容保存到非 bash 脚本中的变量

我习惯在 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

相关内容