2011-11-09 69 views
1

我想连接字符串以在csh脚本file1.csh中创建命令字符串。但是,csh不断抱怨commandString变量的错误,我真的不知道我做错了什么。这里是代码的一部分。如何在csh中连接字符串?

set var1 = "Hat" 
set var2 = 100 
set embeddedString = 's/'$var1' =.*$/'$var1' = '$var2'/g' 
set commandString = "sed -i ' "$embeddedString" ' productPrice.txt" 
echo $commandString 

我的目标是建立CommandString中vairable要的东西作为

sed -i 's/Hat =.*$ /Hat = 100/g' productPrice.txt 

然后,该CommandString中会被插入到另一个脚本文件,file2.csh。 file2.csh是执行帽子价格替换命令的实际脚本文件。另外,var1和var2的值是从priceUpdateList.txt文件中读取的,因此它们不是固定值。换句话说,我不能简单地在commandString变量中输入Hat和100。有谁知道如何正确使用引用来在csh中生成命令字符串?

谢谢你这么多,

+0

我无法在我的环境中测试这个,但是您必须引用(至少1x)嵌入式单引号(即'cmdStr =“sed -i \'...')。 $ cmdStr你需要''eval'吧?祝你好运。 – shellter

+0

另外,打开shell调试(hm ... csh ...'set -vx',就像所有其他的shell一样?)。然后你可以得到一些关于如何解释变量的想法祝你好运 – shellter

+0

非常感谢你在我想杀死自己之前,它工作了:)我发现我可以成功设置commandString,但我无法回应它。但是,只要csh可以设置变量,我很满意。 – Cassie

回答

1

你必须引用(至少1个)嵌入式单引号(即cmdStr = "sed -i \' ....实际运行$ cmdStr你需要eval对不对?

要使用csh shell中调试(这我会建议看看发生了什么),在你的脚本改变第一行

#!/bin/csh -vx 

,因为它是执行这将显示你的每行代码或块,然后扩展与环境变量相同的代码块。

0

怎么样: 集embeddedString = “S,$ VAR1 = *,$ VAR1 = $ VAR2,G” 组的CommandString =“SED -i '$ embeddedString' productPrice.txt”

您可以在embeddedString使用/相反,如果你想:-)

+0

我如上所述更改commandString。但是,csh抱怨回声:没有匹配,所以似乎commandString没有成功设置。 – Cassie

+0

非常感谢你的帮助。 – Cassie

0

好生简单:
你的目标是建立commandString变量的东西作为

sed -i 's/Hat =.*$ /Hat = 100/g' productPrice.txt 

下面这样做,并打印commandString与你的目标比较...

此外,所有的引号是无用的,除了限定你的“最终”字符串。
但大多数情况下,请注意.*$ and /$var1之间的缺失空间。足以欺骗翻译,看到一个名为$/的字符串,而字符串名称应该以字母开头。

set var1 = "Hat" 
set var2 = 100 
set embeddedString = "s/$var1 =.*$ /$var1 = $var2/g" 
set commandString = "sed -i $embeddedString productPrice.txt" 
echo "$commandString" 
0

对不起,我忘了解释不匹配由卡西

echo $commandString 

enter code here之间的差异报呼应“$ CommandString中的”

是第一个呼应的结果正确构建的命令(当然没有匹配,因为它需要读取一个名为productPrice.txt的缺少文件,而第二个将命令嵌入到双引号中)显示命令本身,这是要求的。

+0

你应该编辑你以前的答案,而不是添加一个新答案。 – mata