首页 > 解决方案 > 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/,''

谢谢和欢呼,马蒂亚斯

标签: cshapostrophe

解决方案


工作案例被视为's,^,data/tar 程序的单个参数,与参数分开--transform

这: set opt="--transform 's,^,data/,'"将 opt 的值设置为相同的字符串。

当您执行时tar … "$opt", opt 的值被替换为单个命令参数,导致tar无法识别的参数。该命令随后不会再次拆分为单词 - 单词拆分发生在参数替换之前,并且不会为引号内发生的替换重新执行。

我相信(但尚未验证)如果你$foo不带引号写,你会得到你想要的效果。


推荐阅读