使用具有各种引号级别和空格的变量构建命令字符串

2023-12-10

我有一个运行的脚本curl。我希望能够有选择地添加-H参数,如果字符串不为空。复杂的是引用和空格的级别。

caption="Test Caption"

if [ "${caption}" != "" ]; then 
    CAPT=-H "X-Caption: ${caption}"
fi

curl -A "$UA" -H "Content-MD5: $MD5" -H "X-SessionID: $SID" -H "X-Version: 1"  $CAPT http://upload.example.com/$FN

这个想法是 CAPT 变量要么是空的,要么包含所需的 -H 标头,其形式与其他标头相同,例如,-H "X-Caption: Test Caption"

问题是运行时,它将分配解释为要执行的命令:

$bash -x -v test.sh
+ '[' 'Test caption' '!=' '' ']'
+ CAPT=-H
+ 'X-Caption: Test caption'
./test.sh: line 273: X-Caption: Test caption: command not found

我已经尝试在代码之前重置 IFS,但没有效果。


完成这项工作的关键是使用数组。

caption="Test Caption"

if [[ $caption ]]; then 
    CAPT=(-H "X-Caption: $caption")
fi

curl -A "$UA" -H "Content-MD5: $MD5" -H "X-SessionID: $SID" -H "X-Version: 1"  "${CAPT[@]}" "http://upload.example.com/$FN"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用具有各种引号级别和空格的变量构建命令字符串 的相关文章

  • 何时用引号将 shell 变量括起来?

    我应该或不应该在 shell 脚本中用引号括住变量吗 例如 下列说法正确的是 xdg open URL eq 2 or xdg open URL eq 2 如果是这样 为什么 一般规则 如果它可以为空或包含空格 或实际上任何空格 或特殊字符
  • 通知管道右侧左侧故障?

    我越来越喜欢在 shell 脚本中的函数之间使用类似于生成器的模式 像这样的事情 parse commands da cmd file process commands 然而 这种模式的基本问题是 如果 parse command 遇到错误
  • C语言中可以使用for循环来改变变量名吗?

    这是一个通用问题 因此我没有尝试解决的实际代码 但我想知道的是 我可以使用for循环更改C中变量的名称 例如 如果我有part1 part2 part3 part 作为我的变量名 有没有办法将它附加到我的循环计数器 以便它会随着每次通过而增
  • 如何转义单引号字符串中的单引号

    比方说 你有一个 Bashalias like alias rxvt urxvt 效果很好 However alias rxvt urxvt fg 111111 bg 111111 不会起作用 也不会 alias rxvt urxvt fg
  • 使用两个变量的内容并将其作为一个变量使用

    这可能是一个非常基本的问题 但我真的不明白发生了什么 如果我有几个varJavascript 中的 s 如下所示 var cube1 paper rect 200 200 0 0 var cube2 paper rect 300 200 0
  • VSCode 集成终端不加载 .bashrc 或 .bash_profile

    我有以下文件来处理 shell 配置 bash profile if f bashrc then source bashrc fi and bashrc configure shell 如果我使用以下命令从命令行打开 VSCodecode
  • 有没有办法在 MacOSX 上使用 Xcode 将 bash shell 脚本与 AppleScriptObjC 应用程序一起打包?

    我正在尝试使用 AppleScriptObjC 作为包装器来自动化三个或四个 bash shell 脚本 这将为我提供一个友好的 GUI 前端来选择数据文件等 以及方便的文本文件操作和多个 bash 脚本的处理 一切正常 我可以按下按钮并运
  • PostgreSQL 中的用户定义变量

    我有以下 MySQL 脚本 我想在 PostgreSQL 中实现 SET statement search address query PREPARE dynquery FROM statement EXECUTE dynquery DEA
  • sed:替换文本块

    我有一堆文件 从一段代码开始 我试图用另一个代码块替换 Replace
  • 通过多个换行符分割文件

    假设您有以下输入文件 Some text It may contain line breaks Some other part of the text Yet an other part of the text 并且您想要迭代每个文本部分
  • Bash:使用参数扩展查找和替换

    我想更换输入法 find string include 圆进度 38px 30px 4eb630 和输出 输出字符串 include 圆进度 38px 30px using find string pattern replacement s
  • 如何在 Mac OS X 中通过给出进程名称来获取进程的 PID?

    我正在编写一个脚本来监视任何给定进程的 CPU 和 MEM 为此 我需要将要监视的进程的名称作为命令行参数发送 例如 monitorscript
  • Perl 中围绕散列键的引号是一个好习惯吗?

    在 Perl 中使用散列时引用键是个好主意吗 我正在开发一个非常大的遗留 Perl 代码库 并尝试采用 Damian Conway 建议的许多最佳实践Perl 最佳实践 http oreilly com catalog 9780596001
  • 根据列表中的关键字过滤数据框中的文本

    我有一个列表列表 列表的每个子列表都包含用于过滤数据框中文本的关键字 keywords tarifa mantenimiento mensual tasa anual seguro bancaria seguro generales mi
  • grep 以特定字符串开头的行

    我想找到文件中以特定字符串开头的所有行 问题是 我事先不知道字符串里有什么 该值存储在变量中 天真的解决方案如下 grep my string file txt 因为如果 Bash 变量my string包含任何正则表达式特殊字符 grep
  • cron 作业不适用于 xwindow

    我在 crontab 中有以下行 1 xeyes 它不显示任何 xwindow 但相反 1 touch somefile txt 工作正常 尝试在谷歌上搜索但没有得到任何具体答案 如果您运行的命令使用 X 服务器 您必须告诉 cron 在哪
  • 安装heroku toolbelt后出现Ruby错误

    我正在 win 7 32 位系统上使用 Heroku 但我没有管理员权限 我已经下载并安装了heroku工具带如下http community webfaction com questions 11803 heroku toolbelt h
  • sed:用匹配的模式替换第 n 个单词?

    我有一个具有以下特征的文本文件 每行至少有三个由空格分隔的 单词 单词 可以是任何字符或字符串 我在一些行中附加了一些注释 并提出了对原始单词进行更改的初步建议 现在想使用 sed 为我进行这些更改 因此 为了提供更清晰的图片 我的文件如下
  • 带有转义字符的 JavaCC 引用

    标记可以包含转义字符的带引号的字符串的常用方法是什么 这里有些例子 1 this is good 2 this is good 3 this is good 4 this is bad 5 this is bad 6 this is bad
  • 不使用 var 关键字声明变量

    w3schools 上写着 如果声明变量时不使用 var 则该变量始终变为 GLOBAL 在函数内部声明全局变量有用吗 我可以想象在某些事件处理程序中声明一些全局变量 但它有什么用呢 更好地利用内存 不 没有内存优势或类似的东西 w3sch

随机推荐