如何在shell脚本中创建堆栈?

Jan*_*lho 8 shell stack sh

我需要在 shell 脚本中创建一个堆栈,以便将值推送到循环中进行处理。第一个要求是这必须以可移植的方式实现,因为我想使用该脚本作为可移植的安装程序(至少在类 Unix 操作系统之间)。第二个要求是它需要能够在循环内更改,因为在循环以递归方式处理条目时可能会出现新信息。第三个要求是我每个条目有不止一行信息(这大多是一个固定数字,如果不是,可以根据第一行信息计算)。

我的尝试是使用堆栈文件:

#!/bin/sh

echo "First entry" > stack.txt
echo "More info for the first entry" >> stack.txt
echo "Even more info for the first entry" >> stack.txt

while read ENTRY < stack.txt; do
    INFO2=`tail -n +2 stack.txt | head -n 1`
    INFO3=`tail -n +3 stack.txt | head -n 1`

    tail -n "+4" stack.txt > stack2.txt

    # Process the entry...

    # When we have to push something:
    echo "New entry" > stack.txt
    echo "Info 2" >> stack.txt
    echo "Info 3" >> stack.txt

    # Finally, rebuild stack
    cat stack2.txt >> stack.txt
done
Run Code Online (Sandbox Code Playgroud)

这很完美,只是感觉不对。有没有一种不那么“hacky”的方法来做到这一点?

预先感谢您的任何帮助!

por*_*ast 3

查看此处的“示例 27-7. 空数组和空元素”部分。具体来说,评论说,上面是“推”,“流行”是:

http://tldp.org/LDP/abs/html/arrays.html

如果您想为每个元素编码多行,我建议您对这些行进行 base64 或 JSON 编码。您还可以使用 url 编码或使用 echo 转义字符。

由于您需要使用数组,因此您可以在 sh 中使用以下数组示例:

http://www.linuxquestions.org/questions/linux-general-1/how-to-use-array-in-sh-shell-644142/