【发布时间】:2019-10-10 14:51:16
【问题描述】:
我找到了一种方法来检查if 语句的输入是否对应于日期模式和is not a eccentric date。
分别:
if [[ $dateinput =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]date -d "$dateinput"
他们工作。
我尝试在 while 循环中尽可能地应用它:
dateinput="1992-01-01" #voluntarily made in order to see if the while statement is ok
while [ ! date -d "$dateinput" ]; do
read -p "Indicate a date please: " Date
dateinput=$Date
done
结果是它显示提示文本Indicate a date please:,然后显示script.sh: line 73: [[! : command not found,其中第73行是:while [ ! date -d "$dateinput" ]; do。此外,变量dateinput 之后就不再存在,因为它不会显示echo "the input date is: ${dateinput}",而是继续读取并显示脚本的其余行。
我能做些什么来执行它?
bash 版本:4.4.20 |操作系统版本:Ubuntu 18.04.3 LTS。
【问题讨论】:
-
第 73 行的错误信息和您所说的似乎不一致。但除此之外:如果您检查退出状态(您为
date -d执行此操作),您应该不将命令包装在[ ]或[[ ]]:if ! date -d "$dateinput"; then...中,可能带有@ 987654335@ 使任何输出静音。 -
2>&1 比 &> 好,因为我相信后者在 shell 中并不完全支持
-
@Lepr 当然,但如果我知道我使用 Bash 4.4,我喜欢使用方便的速记。该脚本已经使用了一堆 Bashisms(
=~匹配,read -p)——我可以放心地假设&>会起作用。
标签: bash