我想/bin/sh
在 BSD 平台上的 POSIX shell ( ) 中处理多行字符串并逐行迭代它。Bash 不包含在基本的 BSD 发行版中,并且具有 GPL 许可证 - 所以我试图使其普遍适用/bin/sh
。
我找到了一个使用管道的解决方案,但是在常规/bin/sh
shell 中,这些是在单独的进程中处理的,这意味着以下内容不起作用:
MULTILINE="`cat ${SOMEFILE}`"
SOMEVAR="original value"
echo "${MULTILINE}" | while IFS= read -r SINGLELINE
do
SOMEVAR="updated value"
echo "this is a single line: ${SINGLELINE}"
echo "SOMEVAR is now: ${SOMEVAR}"
done
echo "Final SOMEVAR is unchanged: ${SOMEVAR}"
在上面的示例中,它完成了我想要的,除了对变量的更改,例如${SOMEVAR}
在 while 循环之外无法访问。
我的问题:如果没有这个限制,我怎样才能完成上面的事情?请注意,许多解决方案都需要 Bash,而我使用的是标准 POSIX-shell /bin/sh
。