假设您有两个命令:
第一个命令
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 ”非常相似,但这是本文中最好涵盖的另一个主题回答