bash – 将$@传递给一个shellcript中的函数
发布时间:2020-12-15 21:23:42 所属栏目:安全 来源:网络整理
导读:问题描述 在shell脚本中,我想从函数内迭代所有命令行参数(“$@”).但是,在函数内部,$@引用函数参数,而不是命令行参数.我尝试使用变量将参数传递给函数,但这没有用,因为它会破坏带有空格的参数. 如何以一种不破坏空格的方式将$@传递给函数?我很抱歉,如果之前
问题描述
在shell脚本中,我想从函数内迭代所有命令行参数(“$@”).但是,在函数内部,$@引用函数参数,而不是命令行参数.我尝试使用变量将参数传递给函数,但这没有用,因为它会破坏带有空格的参数. 如何以一种不破坏空格的方式将$@传递给函数?我很抱歉,如果之前有人询问过,我试图搜索这个问题和there are a lot similar ones,但我还没有找到答案. 插图 我制作了一个shell脚本来说明问题. print_args.sh源列表 #!/bin/sh echo 'Main scope' for arg in "$@" do echo " $arg" done function print_args1() { echo 'print_args1()' for arg in "$@" do echo " $arg" done } function print_args2() { echo 'print_args2()' for arg in $ARGS do echo " $arg" done } function print_args3() { echo 'print_args3()' for arg in "$ARGS" do echo " $arg" done } ARGS="$@" print_args1 print_args2 print_args3 print_args.sh执行 $./print_args.sh foo bar 'foo bar' Main scope foo bar foo bar print_args1() print_args2() foo bar foo bar print_args3() foo bar foo bar 正如你所看到的,我无法将最后一个foo bar显示为单个参数.我想要一个与主范围提供相同输出的函数. 解决方法
您可以使用此BASH功能:
#!/bin/bash echo 'Main scope' for arg in "$@" do echo " $arg" done function print_args1() { echo 'print_args1()' for arg in "$@"; do echo " $arg" done } function print_args3() { echo 'print_args3()' for arg in "${ARGS[@]}"; do echo " $arg" done } ARGS=( "$@" ) print_args1 "$@" print_args3 你可以看到顶部使用bash shebang: #!/bin/bash 要求能够使用BASH数组. 输出: bash ./print_args.sh foo bar 'foo bar' Main scope foo bar foo bar print_args1() foo bar foo bar print_args3() foo bar foo bar (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |