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つのトピックです。回答