Bash 保存shell子流程中变量的值 而IFS=”“读取令牌 做 BUFFER=“$BUFFER$token” 已完成

Bash 保存shell子流程中变量的值 而IFS=”“读取令牌 做 BUFFER=“$BUFFER$token” 已完成,bash,shell,sh,Bash,Shell,Sh,我有一个问题可能与以下事实有关:在sh和bashshellread正在子流程中执行,因此我无法找到正确的方法来保存和“链接”此循环的结果 简而言之,我的BUFFER变量在每个周期都会重置,我真的想不出一个好的可移植方法来实现这一点。因为$VAR是一个文件名列表,我假设您需要将文件连接在一起,然后重定向到while循环。我认为应该采取以下措施: $VAR=” /etc/网络 /etc/纸张尺寸 " $while IFS=“”读取令牌;做 BUFFER=“$BUFFER$token” done

我有一个问题可能与以下事实有关:在
sh
bash
shell
read
正在子流程中执行,因此我无法找到正确的方法来保存和“链接”此
循环的结果


简而言之,我的
BUFFER
变量在每个周期都会重置,我真的想不出一个好的可移植方法来实现这一点。

因为
$VAR
是一个文件名列表,我假设您需要将文件连接在一起,然后重定向到while循环。我认为应该采取以下措施:

$VAR=”
/etc/网络
/etc/纸张尺寸
"
$while IFS=“”读取令牌;做
BUFFER=“$BUFFER$token”

done$VAR
变量包含一个文件名-是这样吗?但是,如果您是从命令进行管道传输而不是从文件重定向,那么管道的每一侧都有效地位于子shell中,因此,一旦管道被打开,缓冲区就会超出范围done@DigitalTrauma
VAR
包含一系列由换行符或空格分隔的文件名。我正在使用
sh
,但它没有按预期工作。假设您的代码工作正常,
BUFFER
VAR
的值基本相同。@chepner不正确,
VAR
是文件名,
BUFFER
是文件内容谢谢,但我的问题的核心实际上是至少在这两个shell之间的高可移植性,
bash
提供了许多在
sh
@user2485710下无法提供的功能。请参阅我的编辑,并提供一个额外的
sh
兼容解决方案。感谢您的帮助,我的脚本变得太复杂了,我可能会重写它,我还发现了符号链接和非“标准”文件的一些微妙问题,显然一些unix/linux实用程序默认情况下喜欢遵循符号链接,这增加了复杂性,这也是我重新思考的一个原因。
while IFS=" " read token
do
  BUFFER="$BUFFER $token"
done < "$VAR"
$ VAR="
/etc/networks
/etc/papersize
"
$ while IFS=" " read token; do
      BUFFER="$BUFFER $token"
  done < <( cat $VAR )
$
$ echo $BUFFER
# symbolic names for networks, see networks(5) for more information link-local 169.254.0.0 letter
$ 
#!/bin/sh

VAR="
/etc/networks
/etc/papersize
"

for f in $VAR; do
    while IFS=" " read token; do
        BUFFER="$BUFFER $token"
    done < $f
done

echo $BUFFER