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

标签 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\'\'''

请帮忙!!

最佳答案

使用数组可以安全地保留参数边界:

#!/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/

相关文章:

bash - $@ 是什么意思?

linux - 查找抛出路径必须先于脚本中的表达式

linux - 如何让 Linux 等到我的程序完成其 SIGTERM 操作?

c - C中如何检查服务器端是否建立连接

linux - 从 TCL 文件执行 linux 命令

shell - 使用 UNIX 命令替换 csv 中的字符或修复不正确的换行符

linux - Slurm:获取帐户限制

linux - "One of Hyper-V components is not running",Windows Server 2012 中的 Linux?

bash - sudo -u(用户)cmd 在 bash 脚本中不起作用

linux - 从 bash 脚本读取 makefile 变量