我们如何从其子 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 中获得了值。
希望这可以帮助。