我遇到了问题而无法找到解决方案。
我正在编写一个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\'\'''
请帮助!!
答案 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。