首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在POSIX shell脚本中使用伪数组?

如何在POSIX shell脚本中使用伪数组?
EN

Unix & Linux用户
提问于 2018-02-01 09:06:45
回答 1查看 6.8K关注 0票数 8

如何在POSIX shell脚本中使用伪数组?

我想将Bash脚本中的10个整数数组替换为类似于POSIX shell脚本的数组。

我在处理数组的部分中遇到了里奇的sh ()技巧

我试过的是:

代码语言:javascript
复制
save_pseudo_array()
{
    for i do
        printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/"
    done
    echo " "
}

coords=$(save_pseudo_array "$@")
set -- 1895 955 1104 691 1131 660 1145 570 1199 381
eval "set -- $coords"

我不明白,这就是问题所在,如果有人能对此有所了解,非常感谢。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2018-02-01 09:17:06

这样做的目的是将任意字符串的列表编码成一个标量变量,其格式以后可用于重构列表或任意字符串。

代码语言:javascript
复制
 $ save_pseudo_array x "y z" 当您将set --放在前面时,它会生成shell代码来重新构造x、y z字符串的列表,并将其存储在$@数组中,您只需使用evaluate即可。sed负责正确引用每个字符串(在第一行开头添加',在最后一行末尾添加D7,用'\''替换所有's )。但是,这意味着对每个参数运行一个printf和sed命令,因此效率很低。只需一次awk调用,就可以以更直接的方式实现这一点:save_pseudo_array() {
  LC_ALL=C awk -v q=\' '
    BEGIN{
      for (i=1; ix\ny' "a'b"
'x' \
'y z' \
'x
y' \
'a'\''b' \

$

当您将D1放在前面时,它会生成shell代码来重新构造D2、D3字符串的列表,并将其存储在D4数组中,您只需使用D5uate即可。

D6负责正确引用每个字符串(在第一行开头添加D7,在最后一行末尾添加D7,用D9替换所有D8s )。

但是,这意味着对每个参数运行一个D10和D11命令,因此效率很低。只需一次awk调用,就可以以更直接的方式实现这一点:

A12

票数 9
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/421158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档