每秒列出时间的Bash脚本

3

这是我第一次来到这里,因为我终于开始学习编程了。无论如何,我只是试图每秒打印纳秒级别的时间,我有以下代码:

#!/usr/bin/env bash

while true;
do
 date=(date +%N) ;
 echo $date ;
 sleep  1 ;
done

现在,这只是返回了一串日期字符串,而这不是我想要的结果。出了什么问题?我的学习过程有些混乱,如果这个问题真的很简单,请原谅我。同时,我确实成功找到了一个可以在提示符下工作的解决方案:

while true ; do date +%N ; sleep 1 ; done

但是这显然不能作为一个脚本工作吧?

如果有人看到这个,编辑一下:啊,这确实修复了我的错误。我注意到你没有添加分号。那是因为我只定义了一个变量吗?另外,你能解释一下$是什么吗?我以为它是用来调用变量的。而且我发现上面的代码确实可以作为一个脚本运行;我原本以为date的输出不会被显示在屏幕上。


你忘记了问题。 - Ignacio Vazquez-Abrams
但那显然不适用于脚本。为什么不呢? - Stephen
2
实际上,你脚本中的分号都是不必要的——只有当你将两个命令放在同一行时才需要它们。至于 $,它根据后面跟着的内容执行许多不同的操作:$var${var} 展开一个变量,$(command) 运行一个命令并替换其输出,以及(仅在 bash 中)$((expr)) 计算一个数学表达式。 - Gordon Davisson
4个回答

7

变更

date=(date +%N) ;

为了

date=$(date +%N)

2
这个版本应该可以工作。
#!/bin/bash

while true; do
 date=$(date +"%N")
 echo Current date is $date
 sleep 1
done

1

你也可以用 "`"(反引号)将你的命令括起来。

例如:

date=`date +%N`

致敬


避免使用反引号!请改用$(...) - gniourf_gniourf

1
使用Shell命令的一行代码
while [ 1 ] ; do echo -en "$(date +%T)\r" ; sleep 1; done

使用CTRL+C退出

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接