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