如何将 bash 算术与命令输出结合起来?

如何将 bash 算术与命令输出结合起来?

假设您有两个命令:

第一个命令

let foo=2+2
echo $foo
4

第二条命令

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

这是使用 the$( )代替的一个重要原因` `(参见$(stuff) 和 `stuff` 有什么区别?

如果你像这样嵌套它,你甚至不需要let变量:

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

答案2

您需要$在括号前添加一个并导出$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 实例之间不共享变量。每次运行$()(或反引号)命令时,父 shell 将无法访问其中定义的任何变量:

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

正如您所看到的,尽管您foo在子 shell 中设置为 0 $(),但该值不会导出到父 shell。

答案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 ))"

请注意``日期 +%s\$( date +%s )“日期+%s ”非常相似,但这是本文中最好涵盖的另一个主题回答

相关内容