当前位置: 首页 > 面试题库 >

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

周睿范
2023-03-14
问题内容

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


问题答案:

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


 类似资料:
  • 问题内容: 我现在想在“摘要”中添加一个变量$ {date}: 但是变量不会在bash中的单引号内扩展。 有可能这样做吗? 注意:GoogleCL是用python编写的命令行程序。我在使用Python 2.6的Ubuntu 10.10上。 问题答案: 我将在列表中添加另一个选项:将变量定义为换行符,然后在双引号中使用该变量。

  • 问题内容: 我正在尝试在“ ABCXYZ123”位置更新“ hi”。但不粘贴“ hi”,而是粘贴“ Marsha”。 问题答案: 尝试:

  • 组件具有变量作为观察者: 当

  • 问题内容: 我已经编写了一个脚本来从中检索某些值。如果将值提供给jq ,它将起作用,但是该变量似乎不起作用(或者我不知道如何使用它)。 问题答案: 还考虑将shell变量(EMAILID)作为jq变量传递(为便于说明,此处也称为EMAILID): 后记 作为记录,另一种可能性是使用jq 函数访问环境变量。例如,考虑以下bash命令序列: 输出是一个JSON字符串:

  • 问题内容: 我似乎无法从php中将变量传递给我的bash脚本。无论我如何尝试,$ uaddress和$ upassword都变为空。 *_ __ _ __ __ * __ __ bash * __ __ * * ** *_ __ _ __ * PHP __ * __ __ * __ ** *_ __ _ _ _输出和调试 _ _ _ * *_ 问题答案: 您需要将变量作为参数传递给Shell脚本,

  • 问题内容: 我正在上unix / linux类,我们还没有学习变量或函数。我们刚刚学习了一些基本实用程序,例如标志和管道,输出和追加到文件。在实验室任务中,他希望我们找到最大的文件并将其复制到目录中。 我可以获得5个最大的文件,但我不知道如何在一个命令中将它们传递给cp 问题答案: 这将是: 假设管道是正确的。反引号替换该行中命令的输出。 您还可以进行测试: 将全部复制,和成。