加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读