如何在csh中连接字符串?

时间:2011-11-09 20:35:29

标签: string string-concatenation csh quotations

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

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

我的目标是将commandString设置为

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

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

非常感谢你,

4 个答案:

答案 0 :(得分:1)

您必须引用(至少1x)嵌入的单引号(即cmdStr = "sed -i \' ....要实际运行$ cmdStr,您需要eval吗?

要在csh中使用shell调试(我建议您查看发生了什么),请将脚本中的第一行更改为

#!/bin/csh -vx

这将显示执行时的每行代码或代码块,然后扩展环境变量的相同代码块。

答案 1 :(得分:0)

怎么样: set embeddedString =“s,$ var1 =。*,$ var1 = $ var2,g” set commandString =“sed -i'$ embeddedString'productPrice.txt”

如果你愿意,可以在embeddedString中使用/代替: - )

答案 2 :(得分: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"

答案 3 :(得分:0)

抱歉,我忘了解释Cassie引用的No Match

之间的区别
 echo $commandString

enter code here echo“$ commandString”

是第一个回应正确构建的命令的结果(当然不匹配,因为它需要读取一个名为productPrice.txt的缺席文件,而第二个,用双引号嵌入命令,显示命令本身这就是要求的。