得到一个像这样的小bash脚本:
#!/bin/bash
TIME_CMD='/usr/bin/time -f "%E execution time"'
${TIME_CMD} ls
唯一问题:不起作用:
/usr/bin/time: cannot run execution: No such file or directory
Command exited with non-zero status 127
"0:00.00
我做错了什么?
答案 0 :(得分:5)
尝试制作它......
#!/bin/bash
TIME_CMD='/usr/bin/time -f "%E execution time"'
eval "$TIME_CMD ls"
这将利用bash在构造命令字符串后重新解析它,以便正确识别引用的参数。
答案 1 :(得分:5)
将命令存储在变量中通常是个坏主意(有关详细信息,请参阅BashFAQ #050)。它没有像你期望的那样工作的原因是忽略了变量值内部的引用(除非你通过像eval
那样运行它,这往往导致其他解析奇怪)。
在您的情况下,我看到三种相当简单的方法。首先,您可以使用别名而不是变量:
alias TIME_CMD='/usr/bin/time -f "%E execution time"'
TIME_CMD ls
其次,你可以使用一个函数:
TIME_CMD() { /usr/bin/time -f "%E execution time" "$@"; }
TIME_CMD ls
第三,您可以使用数组而不是简单的变量:
TIME_CMD=(/usr/bin/time -f "%E execution time")
"${TIME_CMD[@]}" ls
请注意,对于数组,您需要使用"${array[@]}"
惯用法对其进行扩展,以便正确保留分词符号。