首页 > 解决方案 > 如何将参数中的空格传递给变量中的命令

问题描述

我想将要执行的 bash 命令放在一个变量中,然后执行该变量。该命令有参数,其中一些参数可能包含空格。我怎样才能做到这一点?

到目前为止,我尝试过的是这样的:

nbargs(){ echo $#; }          # define some function

command='nbargs 1 "2 3"'      # I want nbargs to recieve 2 args, not 3      

现在,如果直接调用该命令,它会按预期工作。但间接地,通过变量,它没有。

nbargs 1 "2 3"   # output: 2
echo $command    # output: nbargs 1 "2 3"
$command         # output: 3 ???

我该如何解决我的问题,你能解释为什么执行变量不考虑引号?

标签: bash

解决方案


如果你想存储完整的命令行来调用你的函数,那么你应该使用 shell 数组:

cmd=(nbargs 1 "2 3")

并将其称为:

"${cmd[@]}"

这将正确输出:

2

不要使用变量名command,因为这也是一个 shell 实用程序。

像在字符串变量中一样存储完整的命令很容易出错,尤其是。当你有空格、引号等时。


推荐阅读