我正在尝试创建一个Shell脚本,以检索所有JIRA问题的值并将其存储在文件中。在这里,我希望能够在执行变量之前先对其进行解释。
我尝试了几种替代方法,并用尽了所有的选择。我使用单引号,双引号甚至转义了美元符号字符。甚至exec命令,但它们都不起作用
var1="project in (ELIP)"
./jira.sh --action getIssueList --jql "$var1" --columns "Key" --outputFormat 999 --file "/root/scripts/getList.txt"
注意:命令./jira.sh期望--jql参数用双引号引起来。
我期望的是,应该首先解释$var1
的值,然后再运行./jira.sh
命令。但是我无法使其正常工作。
答案 0 :(得分:0)
好吧,我不知道jira.sh到底是做什么的,但这是有关shell变量的一些解释(用bash测试,其他shell的行为可能有所不同):
首先使用测试脚本来告知如何接收参数:
$ cat test.sh
#!/bin/bash
echo arg1: $1
echo arg2: $2
echo arg3: $3
现在,如果我们使用文字文本参数(无变量)运行
$ ./test.sh arg_no_1 'multiple words argument' arg_no_3
arg1: arg_no_1
arg2: multiple words argument
arg3: arg_no_3
现在我们定义变量(单引号)
$ variable='multiple words variable'
如果不带引号运行,则会得到错误的输出,变量将以bash扩展并占用下一个参数的位置:
$ ./test.sh arg_no_1 $variable arg_no_3
arg1: arg_no_1
arg2: multiple
arg3: words
如果我们尝试将其用简单的引号引起来,则不会解释该变量,而是将其作为文字发送给脚本。
$ ./test.sh arg_no_1 '$variable' arg_no_3
arg1: arg_no_1
arg2: $variable
arg3: arg_no_3
但是用双引号引起来会产生预期的结果:
$ ./test.sh arg_no_1 "$variable" arg_no_3
arg1: arg_no_1
arg2: multiple words variable
arg3: arg_no_3
您应该阅读报价用法。简短的解释:在shell中,单引号'
被视为文字内容,并且不解释其中的变量。将双引号"
视为要解释的内容,并将其内部的变量替换为其值。这是tldp上有关报价的一些信息。另外,gnu.org包含信息。