我有一个问题,我找不到解决方案。
我正在编写一个 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\'\'''
请帮忙!!
最佳答案
使用数组可以安全地保留参数边界:
#!/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有关问题根源和替代方法的详细信息。
关于linux - 如何在 shell 脚本中将单引号放在变量值内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26425642/