带引号和百分比的 bash 变量

带引号和百分比的 bash 变量

我想在脚本中使用时间命令并将其放入变量中(我必须将它用于许多命令),这样我就可以只修改单个变量。

简单地说,这就是我尝试的方法:

PROFILING="/usr/bin/time -f 'time: %e - cpu: %P'" ; $PROFILING ls /usr

我希望它能被翻译成:

# /usr/bin/time -f 'time: %e - cpu: %P' ls /usr
bin  games  include  lib  local  sbin  share  src
time: 0.00 - cpu: 0%

不过我得到这个:

/usr/bin/time: cannot run %e: No such file or directory
Command exited with non-zero status 127
'time:

有什么建议吗?

谢谢

答案1

分词不理解扩展变量中的引号。使用数组代替:

profiling=(/usr/bin/time -f 'time: %e - cpu: %P')
"${profiling[@]}" ls /usr

或者alias

shopt -s expand_aliases # needed in scripts
alias profiling="/usr/bin/time -f 'time: %e - cpu: %P'"
profiling ls /usr

或者函数:

profiling() { /usr/bin/time -f 'time: %e - cpu: %P' "$@"; }
profiling ls /usr

相关内容