gpt4 book ai didi

bash - 'read -ra' 与直接赋值

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

在 bash(第 3 版)脚本中,我想保存传递的命令行参数,以便我可以多次迭代它们(使用 shift)并可能删除其中的一些。

据我了解,"$@"首先就像一个数组。

我的第一个冲动是写:
cmdArgs="$@"
然后操纵 cmdArgs与任何其他数组一样。

但是,我正在阅读很多使用另一种语法的答案:
read -ra cmdArgs <<<"$@"

为什么?第二个选项更长,作用不太明显,但似乎是首选。那为什么?

最佳答案

两者都不正确。两者都尝试使用 "$@"正确,但每个人都在上下文中使用它,在上下文中,在您可以访问各个元素之前,结果单词列表被折叠成一个以空格分隔的字符串。

第一个将字符串分配给一个常规变量,而不是一个数组。

$ set "foo bar" baz
$ cmdArgs="$@"
$ printf "%s\n" "$cmdArgs"
foo bar baz

第二个使用 <<<运算符,它只需要一个单词,所以 read获取单个以空格分隔的字符串并将其拆分为一个分隔列表,以便将包含空格的参数拆分为多个数组元素。

$ read -ra cmdArgs <<< "$@"
$ printf "%s\n" "${cmdArgs[@]}"
foo
bar
baz

正确的方法是

$ cmdArgs=( "$@" )
$ printf "%s\n" "${cmdArgs[@]}"
foo bar
baz

关于bash - 'read -ra' 与直接赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27296904/

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