Environment-Variables
線上的環境變數搞亂了時間輸出
看一下這個
$ time echo 1 1 real 0m0.000s user 0m0.000s sys 0m0.000s
$ TESTVAR=TEST time echo 1 1 0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 1932maxresident)k 0inputs+0outputs (0major+74minor)pagefaults 0swaps
我已經通過預先導出變數來解決這個問題,但我很想知道這是為什麼。
(ubuntu 和 bash)
當您使用該表單時,您執行的命令與內置
ENV=val
的 bash 不同(您從 執行 GNU 時間程序)。time``/usr/bin/time
如果要使用內置的 shell,請像這樣使用它:
$ time TESTVAR=TEST echo 1 1 real 0m0.000s user 0m0.000s sys 0m0.004s $ time TESTVAR=TEST printenv TESTVAR TEST real 0m0.003s user 0m0.004s sys 0m0.000s
這與最近一個問題背後的原因密切相關:為什麼大括號命令組在 POSIX Shell Grammar 中的左大括號後需要空格?
time
, like{
, 是保留字,變數賦值後不能出現保留字。bash-5.0$ foo=bar { echo $foo; } bash: syntax error near unexpected token `}' bash-5.0$ foo=bar if true; then echo; fi bash: syntax error near unexpected token `then' bash-5.0$ foo=bar if true bash: if: command not found
由於
time
不被辨識為 中的保留字TESTVAR=TEST time echo 1
,因此它會進行正常的命令執行,查找別名、函式和(在這種情況下,最終以)外部命令執行。