Bash将变量作为参数传递给引号

时间:2016-09-20 00:11:15

标签: linux bash

假设./program是一个只打印参数的程序;

$ ./program "Hello there"
Hello there

如何从变量中正确传递带引号的参数?我想这样做;

$ args='"Hello there"'  
$ echo ${args}  
"Hello there"  
$ ./program ${args}  
Hello there # This is 1 argument

但相反,当我查看变量时,args中的引号似乎被忽略,所以我得到了;

$ args='"Hello there"'
$ echo ${args}
"Hello there"
$ ./program ${args}
"Hello there" # This is 2 arguments

是否可以将bash视为引用,就好像我是在第一个代码块中自己输入的一样?

1 个答案:

答案 0 :(得分:2)

我不知道你从program到哪里,但看起来它已经坏了。这是在bash中编写它的正确方法:

#!/bin/bash

for arg in "$@"; do
    echo "$arg"
done

这将在单独的行中打印每个参数以使它们更容易区分(当然,包含换行符的参数会有问题,但我们不会传递这样的参数)。

将上述内容保存为program并为其授予执行权限后,请尝试以下操作:

$ args='"Hello there"'
$ ./program "${args}"
"Hello there"

,而

$ args='"Hello there"'
$ ./program ${args}
"Hello
there"