假设./program是一个仅打印出参数的程序;
./program
$ ./program "Hello there" Hello there
如何正确传递变量中带引号的参数?我正在尝试这样做;
$ args='"Hello there"' $ echo ${args} "Hello there" $ ./program ${args} Hello there # This is 1 argument
但是,当我通过一个变量时,引号args似乎被忽略了,所以我得到了;
args
$ args='"Hello there"' $ echo ${args} "Hello there" $ ./program ${args} "Hello there" # This is 2 arguments
bash是否有可能像对待我自己一样在第一个代码块中输入引号?
我不知道你从哪里来的program,但看来它坏了。这是用bash编写的正确方法:
program
#!/bin/bash for arg in "$@"; do echo "$arg" done
这会将每个参数打印在单独的行中,以使它们更易于区分(当然,包含换行符的参数会出现问题,但我们不会传递此类参数)。
将以上内容另存为program并授予其执行权限后,请尝试以下操作:
$ args='"Hello there"' $ ./program "${args}" "Hello there"
而
$ args='"Hello there"' $ ./program ${args} "Hello there"