在csh中设置环境变量

时间:2012-03-16 14:52:57

标签: linux shell environment-variables csh

我在脚本文件的第一行有以下行:

#!/bin/sh

所以我正在使用csh。(?)

我想将以下输出分配给环境变量:

echo $MYUSR | awk '{print substr($0,4)}'

我试试:

set $MYVAR = echo $MYUSR | awk '{print substr($0,4)}'

但它不起作用, 我该怎么做?我想在sh文件中做到这一点。

4 个答案:

答案 0 :(得分:2)

您的脚本应该是

 #!/bin/csh

 set MYVAR = `echo $MYUSR | awk '{print substr($0,4)}'`

 echo $MYVAR

我现在没有办法对此进行测试,如果它不起作用,现在就让我吧。


如果您使用#!/bin/sh继承了其他人的脚本基础,  然后你必须找出/ bin / sh是否真的是bourne shell,或者它是否是/ bin / bash的链接

你可以通过

来判断
   ls -l /bin/sh /bin/bash

如果你找回大小完全相同的文件的信息,你真的使用bash,但称为/ bin / sh

所以试试这两个解决方案

   MYVAR=$(echo $MYUSR | awk '{print substr($0,4)}')
   echo $MYVAR

   MYVAR=``echo $MYUSR | awk '{print substr($0,4)}``  
   echo $MYVAR

   # arg!! only one pair of enclosing back-ticks needed, 
   # can't find the secret escape codes to make this look exactly right.

在所有情况下(csh)包括,后面的标记和$( ... )被称为命令替换。 每个输出来自内部运行命令,将被替换为命令行,然后执行整个命令。

我希望这会有所帮助。

答案 1 :(得分:0)

如果它是/bin/sh它是bourne shell或bash,并使用后面的引号来执行某些操作,并指定它...

MYVAR=`echo $MYUSR | awk ...`

答案 2 :(得分:0)

该脚本第一行表示它应由Bourne shell(sh)解释,而不是csh。将其更改为

#!/bin/csh

答案 3 :(得分:0)

代码的第一行显示您没有使用csh。您正在使用普通的sh环境/ shell。您有两个选择:

  1. 将第一行更改为#!/bin/csh
  2. 保持第一行不变,更新设置变量的代码。

    MYVAR=`echo $MYUSR | awk '{print substr($0,4)}`
    echo $MYVAR
    
  3. 如果您收到任何错误,请告诉我。