gpt4 book ai didi

linux - 如何将所有命令参数放在一个变量中

转载 作者:太空狗 更新时间:2023-10-29 11:32:13 24 4
gpt4 key购买 nike

我想执行一个需要 3 个参数的 shell 脚本。

参数 2 包含带空格的字符串

我想像这样将所有参数放在一个变量中:

Linux:~# kk="\"111\" \"222 222\" \"333\""
Linux:~# echo $kk
"111" "222 222" "333"

现在如果我调用一个函数:

func() {
echo ---$1---
echo ---$2---
echo ---$3---
}

以这种方式使用 $kk 变量

func $kk

然后它会返回

Linux:~# func $kk
---"111"---
---"222---
---222"---

我期待得到这个结果

---111---
---222 222---
---333---

如何在不使用 eval 的情况下解决这个问题?

我知道 eval 解决了这个问题,但我不想使用它(因为如果我多次执行这样的调用会花费时间)。

最佳答案

OP originally tagged question , then removed the tag. Please refer to Charles Duffy's great answer for a POSIX shell solution! the solution below uses arrays and is only suitable for .


你不应该把你的数据放在这样的字符串中,而应该放在数组中。顺便说一句,您的函数中缺少一些引号:

func() {
echo "---$1---"
echo "---$2---"
echo "---$3---"
}

或更好(printf 优于 echo):

func() {
printf -- '---%s---\n' "$1"
printf -- '---%s---\n' "$2"
printf -- '---%s---\n' "$3"
}

$ kk=( "111" "222 222" "333" )
$ func "${kk[@]}"

将愉快地打印:

---111---
---222 222---
---333---

您甚至可以在参数中包含换行符等:

$ kk=( $'one\none' "222 222" $' *   three\nthree' )
$ func "${kk[@]}"
---one
one---
---222 222---
--- * three
three---

关于linux - 如何将所有命令参数放在一个变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28542911/

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