Rec*_*rty 7 bash real-time shell-script environment-variables timestamps
我正在尝试创建一个 raspberry pi spy cam bug。我正在努力使为各种进程创建的新文件提出
NOW=`date '+%F_%H:%M:%S'`;
Run Code Online (Sandbox Code Playgroud)
这工作正常。但它需要一个echo来更新时间
$NOW也在/home/pi/.bashrc文件中同样的问题,不更新wo
. ~/.bashrc
Run Code Online (Sandbox Code Playgroud)
#! /bin/bash
NOW=`date '+%F_%H:%M:%S'`;
filename="/home/pi/gets/$NOW.jpg"
raspistill -n -v -t 500 -o $NOW.jpg;
echo $filename;
Run Code Online (Sandbox Code Playgroud)
我不明白它是如何工作的,因为它在 raspistil 的输出之前和引号中。
谢谢大家!!!
Kus*_*nda 22
当你做
NOW=`date '+%F_%H:%M:%S'`
Run Code Online (Sandbox Code Playgroud)
或者,使用更现代的语法,
NOW=$( date '+%F_%H:%M:%S' )
Run Code Online (Sandbox Code Playgroud)
该变量NOW将在date执行该行时设置为命令的输出。如果您在 中执行此操作~/.bashrc,$NOW则将是一个时间戳,告诉您何时开始当前交互式 shell 会话。
您还可以设置变量的值
printf -v NOW '%(%F_%H:%M:%S)T' -1
Run Code Online (Sandbox Code Playgroud)
如果您使用的是bash4.2 版或更高版本。这会将时间戳直接打印到变量中,而无需调用date.
在您显示NOW的脚本中,运行脚本时正在设置变量(这就是您想要的)。
当任务
filename="/home/pi/gets/$NOW.jpg"
Run Code Online (Sandbox Code Playgroud)
执行时,shell 将扩展字符串中的变量。即使它是双引号,它也会这样做。 单引号阻止 shell 扩展嵌入的变量(在这种情况下这不是你想要的)。
请注意,您似乎并没有filename在调用中实际使用该变量raspistill,所以我不确定为什么要设置它的值,除非您只想echo在最后输出它。
在其余代码中,您应该双引号$NOW变量扩展(和$filename)。如果不这样做,并且稍后更改定义方式NOW以使其包含空格或通配符(文件名通配符模式),则使用的命令$NOW可能无法正确解析其命令行。
比较,例如,
string="hello * there"
printf 'the string is "%s"\n' $string
Run Code Online (Sandbox Code Playgroud)
和
string="hello * there"
printf 'the string is "%s"\n' "$string"
Run Code Online (Sandbox Code Playgroud)
相关事项:
关于命令替换中的反引号:*sh shell 中的反引号(即`cmd`)是否已被弃用?
关于引用变量扩展:忘记在 bash/POSIX shell 中引用变量的安全隐患以及为什么我的 shell 脚本会因空格或其他特殊字符而阻塞?
| 归档时间: |
|
| 查看次数: |
48340 次 |
| 最近记录: |