gpt4 book ai didi

arrays - bash shell 脚本如何构造带空格的数组元素

转载 作者:行者123 更新时间:2023-12-04 16:18:06 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Convert a string into an array with bash, honoring quotes for grouping [duplicate]

(3 个回答)



Bash doesn't parse quotes when converting a string to arguments

(5 个回答)


2个月前关闭。




我想用 space 构造数组元素,它在命令行中运行时有效:

pc:/tmp$ b=('1 2' '3 4')
pc:/tmp$ echo $b
1 2
pc:/tmp$ echo ${b[1]}
3 4
但它用 space 分割元素在脚本中:
pc:/tmp$ cat t.sh
a="'1 2' '3 4'"
echo $a
b=($a)
echo $b
echo ${b[1]}
echo ${b[2]}

pc:/tmp$ bash t.sh
'1 2' '3 4'
'1
2'
'3
我要获取 '1 2'echo $b如得到 '3 4'${b[1]}在脚本中。
我怎么能做到这一点?
为什么它不能在脚本中工作而在命令行中工作?

最佳答案

代码a="'1 2' '3 4'"不创建数组,它创建一个带有嵌入单引号的字符串。

$: a="'1 2' '3 4'"
$: echo "[$a]"
['1 2' '3 4']
如果要创建数组,则必须使用正确的语法。
$: a=( '1 2' '3 4' )
$: printf "[%s]\n" "${a[@]}"
[1 2]
[3 4]
然后如果你想把它复制到另一个数组中,只需把它当作一个数组而不是一个字符串。
b=( "${a[@]}" )
printf "[%s]\n" "${b[@]}"
[1 2]
[3 4]
转换在 a="'1 2' '3 4'" 中创建的字符串到数组有点棘手。
中频 您知道格式与上述格式一致,请尝试以下操作:
$: echo "[$a]"
['1 2' '3 4']
$: IFS='#' read -ra b < <( sed -E "s/' +'/#/g; s/ *' *//g" <<< "$a" )
$: printf "[%s]\n" "${b[@]}"
[1 2]
[3 4]
但总的来说,这是一个糟糕的计划。尝试修复您的输入!

关于arrays - bash shell 脚本如何构造带空格的数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69348041/

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