我需要在 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”的方法来做到这一点?
预先感谢您的任何帮助!
查看此处的“示例 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/