我试图创建一个bash别名,每次调用别名时都会打印当前的UNIX时间戳。我在我的bash的个人资料如下:Bash别名用文件名中的当前时间戳创建文件
alias unix="echo "$(date +%s)""
然而,似乎当前Unix时间戳正在尽快bash的配置文件来源存储,并且不会每个别名叫做时间而改变。
例如,如果我每隔10秒调用一次unix别名,输出总是相同的。如何创建将在调用别名时评估unix时间戳的别名。这可能吗?
我试图创建一个bash别名,每次调用别名时都会打印当前的UNIX时间戳。我在我的bash的个人资料如下:Bash别名用文件名中的当前时间戳创建文件
alias unix="echo "$(date +%s)""
然而,似乎当前Unix时间戳正在尽快bash的配置文件来源存储,并且不会每个别名叫做时间而改变。
例如,如果我每隔10秒调用一次unix别名,输出总是相同的。如何创建将在调用别名时评估unix时间戳的别名。这可能吗?
使用单引号,以防止直接扩展。
alias unix='echo $(date +%s)'
更新:虽然我很高兴已经能够解释单引号和双引号之间的不同膨胀行为,也请看到其他的答案,罗比Cornelissen,一种更有效的方式来获得相同结果。这里不需要echo
,因为它只输出date
已经自己输出的数据。因此,date
不需要在子外壳中运行。
$ alias unix="date +%s"
$ touch myfile.$(unix)
$ touch myfile.$(unix)
$ ls -l myfile*
-rw-r--r-- 1 rbednark wheel 0 Apr 11 21:46 myfile.1460436366
-rw-r--r-- 1 rbednark wheel 0 Apr 11 21:46 myfile.1460436368
+1为更优雅的解决方案(虽然OP的问题没有解释)。 – mklement0
非常感谢。它不会让我接受你的答案7分钟,但我会。 – flyingL123
此外,只是为了笑声,你可以通过转义$来实现双引号,这也会阻止立即扩展:'alias unix =“echo \ $(date +%s)”'。 –
+1解释OP的问题。 – mklement0