cshell setenv:论据太多了

时间:2014-07-01 09:58:32

标签: csh

我有c-shell

    set value_str ="one three"
    set line_seprator = ","
    set value_and_sperator = "$value_str$line_seprator"
    setenv STRING_CONCAT $STRING_CONCAT$value_and_sperator

并且我得到了错误:

setenv: Too many arguments.

这是我在脚本中设置全局变量的方法,任何想法为什么我得到错误?

4 个答案:

答案 0 :(得分:2)

只需要将字符串括在引号中 - csh否则会被分隔符混淆。

setenv STRING_CONCAT "$STRING_CONCAT$value_and_sperator"

答案 1 :(得分:0)

您可以设置一个用空格分隔的列表。

    private ApplicationDbContext db;    
    // api methods    
    public JsonResult methodA(string id){
        Resource resource = db.Resources.Find(g);
        db.Entry(resource).State = EntityState.Modified;
        db.SaveChanges();
        return methodB()
    }

    public JsonResult methodB(string id){
        using (var db2 = new ApplicationDbContext())
        {
            Resource resource = db2.Resources.Find(id);
            db2.Entry(resource).State = EntityState.Modified;
            db2.SaveChanges();
        }
        return new JsonResult();
    }

然后在脚本中

setenv value_str "val1 val2"

答案 2 :(得分:-1)

我认为大多数setenv出现问题是因为人们不了解env变量是标量变量,即,虽然您可能循环使用

定义的$a的值
set a = (1 2 3)   

这对于env变量是不可能的。

之后
setenv A "1 2" 

命令

echo $A[1]

不输出$A的期望的第一部分,即1,而是写入

1 2[1]

要通过环境变量A将向量传递到脚本并在其元素上循环,可以使用

set a = ($A)
foreach i ($a) ...

答案 3 :(得分:-2)

只需检查是否在给定setenv的行中,该行应以$ STRING_CONCAT $ value_and_sperator结尾。之后没有标签或空格。这也可能会导致此问题。甚至多个值(例如“。”)