Bash动态变量冲突

Bash动态变量冲突,bash,while-loop,dynamically-generated,bash4,Bash,While Loop,Dynamically Generated,Bash4,我在下面的代码中遇到了一个问题,set-x告诉我正在分配变量,但是尝试在这个循环之外回显它们似乎不起作用 export "ex_$x"=$(git rev-parse HEAD | cut -c1-10) done ((used++)) echo $ex_render echo $ex_storage exit # =/ php -f "${cdir}/../public/bootstrap.php" -- "${l

我在下面的代码中遇到了一个问题,set-x告诉我正在分配变量,但是尝试在这个循环之外回显它们似乎不起作用

          export "ex_$x"=$(git rev-parse HEAD | cut -c1-10)

      done
    ((used++))

    echo $ex_render
    echo $ex_storage

    exit # =/

    php -f "${cdir}/../public/bootstrap.php" -- "${line}" "${ex_render}" "${ex_storage}"

看起来您的代码被截断了,但听起来像


你能把剩下的脚本发出去吗?您可能在while循环时,此时循环体正在不同的环境中使用不同的变量集运行。请使用数组,而不是动态生成的变量名。@chepner如果他有bash 4,这是一个很好的建议。它被标记为这样,但甚至不清楚他是否需要关联数组,或者变量的名称很重要(它们似乎是作为参数传递给PHP脚本的,而不是通过环境继承的)。@JeffBowman是的,我在pastebin上有一个完整的转储文件,这是正确的,我正在输入,让我快速测试,以确保它在接受之前工作正常,+1并被接受。非常感谢。注意:自从我在做
echo-e“render\n存储”之后,我用了你的第二个管道(在读取x;do export ex_$x='foo';done;
@ehime时,这仍然不是真的需要。您可以只执行
,这看起来像是不必要地使用循环。
ex_render='foo';ex_storage='foo'
更清晰,更不容易出错。@ehime您只是将here字符串放在了错误的位置。您可以将它放在
while
关键字o之前r在
完成后
一次。
$ echo hi | read x
$ echo $x
$ # Nothing!
$ read x <<< hi
$ echo $x
hi
while read foo; do things; done < <(process substitution)
inputcommand | ( while read foo; do things; done;
  # variables still assigned as long as you're in the subshell
)