csh:如何将变量从下标传递到父脚本

csh: How to pass a variable from a subscript to a parent script

我想将我在下标中设置的变量传递给父脚本。我想将其作为函数或仅通过 "echo"ing 变量来实现:

parent.sh

#!/bin/csh
enter code here
set VAR_2_CHILD_1 = myName
set VAR_2_CHILD_2 = MAIN_PATH/output.txt

$MAIN_PATH/child.sh $VAR_2_CHILD_1 $VAR_2_CHILD_2

child.sh

#!/bin/csh

if ( =~ *something*) then
    set NAME_SL     =  False
    set SUBDIRID    =  True
    echo  $SUBIDDIR       >> 
endif

echo $NAME_SL $SUBDIRID

或:

#!/bin/csh

function pass_var() {

if ( =~ *something*) then
    set NAME_SL     =  False
    set SUBDIRID    =  True
    echo  $SUBIDDIR       >> 
endif

return $NAME_SL $SUBDIRID
}

后一种情况我不知道如何调用parent.sh

中的函数

一般情况下,下标应该根据$VAR_2_CHILD_1和VAR_2_CHILD_2选择选项,返回一些字符串变量$NAME_SL和$SUBDIRID。我不知道该怎么做。

我还在这里阅读了其他问题,例如:Bash - Return value from subscript to parent script 但我找不到适合我的任何内容。

啊!你使我的心高兴。写了 10 年的 csh(使用 csh、sed、awk 和管道)。刚刚检查了我的档案:650 个脚本和 51000 行。然后,我发现了 perl 并切换了一切。当前 perl 是 770 个文件和 206,000 行。

总之,有几件事。 csh 没有函数,因此您需要使用 child.sh。 (请使用 .csh 或无后缀--bash 受到太多关注:-)

请注意 csh 有别名。 csh 别名比 bash 别名更强大,因为它们可以采用参数列表。您可以使用 ; 获得多行脚本的效果,但它有限制。

父级可以通过 virgule 运算符捕获子输出 [脚本或别名]:

#!/bin/csh
# enter code here
set VAR_2_CHILD_1 = myName
set VAR_2_CHILD_2 = MAIN_PATH/output.txt

set result=(`$MAIN_PATH/child.sh $VAR_2_CHILD_1 $VAR_2_CHILD_2`)
set NAME_SL="$result[1]"
set SUBDIRNAME="$result[2]"

子调用两边的括号是因为子调用返回的是两个词,所以你需要一个数组来捕获它们[如果你想独立操作它们]