bash脚本和命令定义

时间:2010-12-20 21:22:03

标签: bash

得到一个像这样的小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

我做错了什么?

2 个答案:

答案 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[@]}"惯用法对其进行扩展,以便正确保留分词符号。