代码之家  ›  专栏  ›  技术社区  ›  user6348718

如何在shell中的另一个函数内调用某个函数时将参数传递给该函数

  •  1
  • user6348718  · 技术社区  · 7 年前

    我有两个shell脚本函数,如下所示:

    lines(){
        while IFS="" read -l
        do
            line=$(wc -l < "something.txt")
            if [ "$line" = "$1" ] ; then
               do something...
               echo "lines are: "$l""       
            else
    
             #calling files function here
             files
             do something...
             fi
        done<something.txt
    }
    files(){
        do something....
        echo "something...\n""$(lines "$1")"
    }
    ####Main
    case "$1" in
       lines)
            shift
            lines "$1"
            ;;
       *)
    esac
    

    我试图在ubuntu机器上运行这样的脚本:

     sh files.sh line 3
    

    我有一些if操作 在里面 files 我正在打电话 lines 作用调用并返回以执行中的操作时 lines() ,我试图从命令行传递的参数 3 i、 e。, "$1" 正在传递为 null (empty) 谁能帮我一下 线 函数读取我从命令行传递的参数 谢谢

    2 回复  |  直到 7 年前
        1
  •  2
  •   Charles Duffy    7 年前

    简单的方法是创建一个全局数组变量,该变量保留原始命令行参数:

    #!/usr/bin/env bash
    [ "$BASH_VERSION" ] || { echo "ERROR: This script requires bash" >&2; exit 1; }
    
    args=( "$0" "$@" )
    
    func1() { func2 "local-arg1" "local-arg2"; }
    func2() { echo "Function argument 1 is $1; original argument 2 is ${args[2]}"; }
    func1
    

    。。。如果被称为 ./scriptname global-arg1 global-arg2 ,发射为输出:

    Function argument 1 is local-arg1; original argument 2 is global-arg2
    
        2
  •  1
  •   Barmar    7 年前

    位置参数是每个函数的局部参数。所以 files 无法访问 $1 变量 lines 就其本身而言,您需要显式地传递它:

    files "$1"