如何读取 xargs 设置的 bash 变量值?

如何读取 xargs 设置的 bash 变量值?

我们如何从其子 shell 运行中读取 xargs 设置的 bash 变量值?例如:

export VID
echo 1 | xargs -I% sh -c "echo % | echo ID=% && VID=%"
echo $VID

我们期望 VID 打印 1,但 $VID 返回空白

答案1

如果我没看错的话,您希望使用 xargs 将回显的值传递给子 shell 中的 ID 和 VID。由于 VID 之前已导出,但没有值,因此应将新值从子 shell 传递到父 shell;也就是说,命令echo $VID应产生它在子 shell 中收到的值。

如果子 shell 中的值确实设置了,我应该能够使用echo $ID和在子 shell 中回显这些值echo $VID,但是

pg@TREX:~$ echo 42 | xargs -I% sh -c "echo % | ID=% && VID=%; echo $ID; echo $VID"

55
pg@TREX:~$

为了清楚起见,我一开始就将 VID 的值导出为 55。显然,ID 和 VID 都没有在子 shell 中收到值。经过一番尝试,我得出了以下结论:

pg@TREX:~$ echo 42 | xargs -I % sh -c 'ID=%; VID=%; echo $ID; echo $VID'
42
42
pg@TREX:~$

然而之后

pg@TREX:~$ echo $VID
55
pg@TREX:~$

添加export VID=%为 xargs 命令的最后一部分并没有改变结果。但至少变量确实在子 shell 中获得了值。

希望这可以帮助。

相关内容