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

时间:2018-04-19 19:27:23

标签: bash shell ubuntu sh

我有2个函数的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传递的参数即"$1"正在传递为{{ 1}} 有人可以帮助我null (empty)函数如何读取我从命令行传递的参数 谢谢

2 个答案:

答案 0 :(得分:1)

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

#!/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

答案 1 :(得分:0)

位置参数是每个功能的本地参数。因此files无法自行访问$1 lines变量,您需要明确传递它:

files "$1"