如何将单引号放在shell脚本中的变量值中?

时间:2014-10-17 13:02:46

标签: linux shell

我遇到了问题而无法找到解决方案。

我正在编写一个shell脚本,我需要能够发送这些信息:

/usr/bin/wget --header='Content-Type: application/xml'

目前我的脚本中有这个:

#!/bin/bash
HEADER="Content-Type: application/xml"
PARAM_HEADER="--header=\'$HEADER\'"
/usr/bin/wget $PARAM_HEADER

但是当我运行脚本时,我看到我按照这样运行命令:

/usr/bin/wget '--header=\'\''Content-Type:' 'application/xml\'\'''

请帮助!!

1 个答案:

答案 0 :(得分:1)

使用数组能够安全地保留参数边界:

#!/bin/bash
header="Content-Type: application/xml"

params=( )                       # initialize to empty array
params+=( "--header=$header" )   # add your argument
params+=( '--header=X-Foo: something with spaces' ) # add another

/usr/bin/wget "${params[@]}"

请注意,单引号和双引号仅对shell有效 - 运行wget时,它会传递一个C字符串数组,并且不知道用什么类型的引号来保护shell中的任何字符串(或者,就此而言,它是否完全使用shell)。 set -x给出的那些字符串的表示就是 - shell语法中的表示。

有关问题根源和替代方法的详细信息,请参阅BashFAQ #50