如何在POSIX shell脚本中使用伪数组?
我想将Bash脚本中的10个整数数组替换为类似于POSIX shell脚本的数组。
我在处理数组的部分中遇到了里奇的sh ()技巧。
我试过的是:
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"我不明白,这就是问题所在,如果有人能对此有所了解,非常感谢。
发布于 2018-02-01 09:17:06
这样做的目的是将任意字符串的列表编码成一个标量变量,其格式以后可用于重构列表或任意字符串。
$ 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
https://unix.stackexchange.com/questions/421158
复制相似问题