【发布时间】:2023-03-16 19:46:01
【问题描述】:
我了解到您可以将 I/O 重定向到 Bash 中的各种结构(例如“if”和“while”)中或从中取出。当我尝试这个时,我注意到使用“|”在 if 构造的末尾阻止了我在 if 构造中覆盖的任何变量生效;但如果我改用“>”,那么变量修改就会生效。
#!/bin/bash
VAR_0='Unmodified'
if true
then
VAR_0='Changed'
fi | cat
echo "VAR_0: $VAR_0"
###########
VAR_1='Unmodified'
if true
then
VAR_1='Changed'
fi > tmpFile
rm tmpFile
echo "VAR_1: $VAR_1"
在 64 位 Linux 上运行 Bash 版本 4.3.11 会产生以下输出:
VAR_0: Unmodified
VAR_1: Changed
请注意,唯一的区别是我如何从 if 构造重定向 stdout。为什么是“|”防止 VAR_0 被更改?
【问题讨论】:
标签: bash if-statement pipe pipeline