csh - csh 的撇号处理不清楚
问题描述
谁能解释一下,为什么
#!/bin/csh
tar --file=test.a --append --transform 's,^,data/,' data/jobid.dat
按预期工作,在其中创建带有 data/data/jobid.dat 的 test.a,但是
#!/bin/csh
set opt="--transform 's,^,data/,'"
echo "$opt"
tar --file=test.a --append "$opt" data/jobid.dat
失败了
--transform 's,^,data/,'
tar: unrecognized option '--transform 's,^,data/,''
谢谢和欢呼,马蒂亚斯
解决方案
工作案例被视为's,^,data/
tar 程序的单个参数,与参数分开--transform
。
这: set opt="--transform 's,^,data/,'"
将 opt 的值设置为相同的字符串。
当您执行时tar … "$opt"
, opt 的值被替换为单个命令参数,导致tar
无法识别的参数。该命令随后不会再次拆分为单词 - 单词拆分发生在参数替换之前,并且不会为引号内发生的替换重新执行。
我相信(但尚未验证)如果你$foo
不带引号写,你会得到你想要的效果。
推荐阅读
- c# - 单行的电子邮件正文
- node.js - Nodemailer 和 GMail OAuth:不接受用户名和密码
- java - 水平缩放的 Itextpdf 设置无效
- php - 哪里等于零这么慢
- java - 比较三个变量并返回具有最小值/最大值的变量(不是值)
- php - 为带有对象(SimpleXMLElement)的foreach()提供的PHP无效参数
- google-chrome - 从 chrome 中的“内容设置/通知”部分获取所有被阻止和允许的站点列表
- entity-framework - System.InvalidOperationException:在应用程序配置文件中找不到名为“xxx”的连接字符串
- node.js - node.js InApp 和调度
- java - 解析 JSON 时出错,POST 在 JSON 开头包含 \r\n