コマンドラインで条件付き変数を設定する

コマンドラインで条件付き変数を設定する

私の条件が私のUbuntuシステムでtrueの場合は、変数を設定したいと思います。

これは私のif文が正しいことを証明します。

$ (if [ 1 == 1 ]; then echo "hi there"; fi);
hi there

これは変数を設定できることを証明します。

$ a=1
$ echo $a
1

これは、if文の変数設定が機能しないことを示しています。

$ (if [ 1 == 1 ]; then a=2; fi);
$ echo $a
1

どんなアイデアがありますか?私が持っているすべてGoogleの調査これはうまくいくべきことを示しています...

答え1

(...)コマンド部分が問題です。括弧は別々のサブシェルを作成します。サブシェルは親シェルから環境を継承しますが、その中に設定された変数は、サブシェルが終了しても新しい値を保持しません。これは以下にも当てはまります。他の人ディレクトリの変更、シェルオプションの設定など、サブシェル内の環境を変更します。

したがって、サブシェルを削除します。

if [ 1 = 1 ]; then a=2; fi
echo "$a"

答え2

これは、サブシェルに変数を設定しても持続的な効果がないことを証明します。

(if [ 1 == 1 ]; then a=2; fi);
echo $a

生産する

1

それは同じです

(a=2)
echo $a

生産する

1

解決策は括弧を削除することです。

if [ 1 == 1 ]; then a=2; fi;
echo $a

生産する

2

またはサブシェルが必要な場合

(
  if [ 1 == 1 ]; then a=2; fi;
  echo $a
)

生産する

2

答え3

次の方法で行われており、うまく機能します。

_example ~]# if [[ 1 == 1 ]]; then echo "praveen"; a=2; echo $a; fi| sed '1i================================\n output'
================================
 output

praveen
2

関連情報