gpt4 book ai didi

bash - 在 Bash 函数中更改全局位置参数

转载 作者:行者123 更新时间:2023-11-29 09:00:58 25 4
gpt4 key购买 nike

有没有办法从函数中设置 bash 脚本的位置参数?

在全局范围内可以使用 set -- <arguments>更改位置参数,但它在函数内部不起作用,因为它会更改函数的位置参数。

一个简单的例子:

# file name: script.sh
# called as: ./script.sh -opt1 -opt2 arg1 arg2

function change_args() {
set -- "a" "c" # this doesn't change the global args
}

echo "original args: $@" # original args: -opt1 -opt2 arg1 arg2
change_args
echo "changed args: $@" # changed args: -opt1 -opt2 arg1 arg2
# desired outcome: changed args: a c

最佳答案

如前所述,答案是,但如果有人需要这个,可以选择设置外部数组 (_ARRAY),从函数内部修改它,然后然后在事后使用 set -- ${_ARRAY[@]}。例如:

#!/bin/bash

_ARGS=()

shift_globally () {
shift
_ARGS=$@
}

echo "before: " "$@"
shift_globally "$@"
set -- "${_ARGS[@]}"
echo "after: " "$@"

如果你测试它:

./test.sh a b c d
> before: a b c d
> after: b c d

从技术上讲,这不是您要求的,但它是一种解决方法,可以帮助需要类似行为的人。

关于bash - 在 Bash 函数中更改全局位置参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29258609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com