一尘不染

Bash传递变量作为带引号的参数

linux

假设./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是否有可能像对待我自己一样在第一个代码块中输入引号?


阅读 344

收藏
2020-06-03

共1个答案

一尘不染

我不知道你从哪里来的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"
2020-06-03