我有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)
函数如何读取我从命令行传递的参数
谢谢
答案 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"