Bash以外のスクリプトの変数にエコー出力を保存します。

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

もちろん、これは上記のコマンドを入力した親シェルに変数があると仮定しますOSTYPEbashこれは本当ですが、すべての殻がこのようなわけではありません。ただし、以下を$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 isですOSTYPE)。

参考までに、あなたのコードに対応するものは次のとおりです。

$ myvar="$(echo $OSTYPE)"
$ echo "My var is $myvar."
My var is linux-gnu

おすすめ記事