bash算術とコマンド出力を組み合わせる方法は?

bash算術とコマンド出力を組み合わせる方法は?

2つのコマンドがあるとしましょう。

最初のコマンド

let foo=2+2
echo $foo
4

2番目の順序

date "%s"
1377107324

それらをどのように結合しますか?


1を試してください。

echo The epoch time is: `date +%s` in 100 seconds the time \
     will be: `let future={date +%s}+100` $future

2を試してください。

echo The epoch time is: `date +%s` in 100 seconds the time \
     will be: `let future=(date +%s)+100` $future

他に約30の異なる類似の試み

答え1

これが$( )代わりに使用する重要な理由です` `(参照:$(stuff)と `stuff`の違いは何ですか?)

このようにネストすると、let変数も必要ありません。

$ echo $(date +%s) " "  $(( $(date +%s)+100 ))
1377110185   1377110285

答え2

$角かっこの前に1つを追加してエクスポートする必要があります$future

$ echo The epoch time is: `date +%s` in 100 seconds the time  will be: \
 `let future=$(date +%s)+100; export future` $future
The epoch time is: 1377110177 in 100 seconds the time will be: 1377110252

変数は bash インスタンス間で共有されません。コマンドを実行(またはバックティック)するたびに、$()親シェルはここで定義されている変数にアクセスできません。

$ foo=$(echo 12);
$ echo $foo
12
$ foo=(echo 12; foo=0)
$ echo $foo
$ echo $foo
12

ご覧のとおり、fooサブシェルで0に設定していますが、$()その値は親シェルにエクスポートされません。

答え3

変数を宣言してエクスポートし、必要に応じて使用します。

date=$( date +%s )
future=$(( $date + 100 ))

echo "The epoch time is: $date in 100 seconds time will be: $future"

これは作る:

The epoch time is: 1377110185 in 100 seconds time will be: 1377110285

次の値を引き続き使用できます。

echo "which is the same as $(( $date + 100 ))"  

これは作る:

which is the same as 1377110285

スクリプトにある場合はエクスポートする必要はなく、後続のコマンドで使用するためにコマンドラインからエクスポートするだけです。

あるいは、変数を一緒に保持することもできます。

echo "The epoch time is: $(date +%s) in 100 seconds the time will be: $(( $(date +%s)+100 ))"

「date + % s」\$( date +%s )「date + % s」は非常に似ていますが、これはこの記事で最もよく扱われるもう1つのトピックです。回答

関連情報