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]"
子调用两边的括号是因为子调用返回的是两个词,所以你需要一个数组来捕获它们[如果你想独立操作它们]
我想将我在下标中设置的变量传递给父脚本。我想将其作为函数或仅通过 "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]"
子调用两边的括号是因为子调用返回的是两个词,所以你需要一个数组来捕获它们[如果你想独立操作它们]