为什么我$x从下面的片段中得到不同的值?
#!/bin/bash
x=1
echo fred > junk ; while read var ; do x=55 ; done < junk
echo x=$x
# x=55 .. I'd expect this result
x=1
cat junk | while read var ; do x=55 ; done
echo x=$x
# x=1 .. but why?
x=1
echo fred | while read var ; do x=55 ; done
echo x=$x
# x=1 .. but why?
Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个简单的 bash 函数,该函数将许多文件和/或目录作为其参数。这应该:
我有一个脚本,几乎可以满足我的要求,但是排序失败了。脚本的返回值是正确的,但输出不是(未排序和重复)。如果我| sort -u按照指示取消注释该语句,则输出是正确的,但返回值始终为0.
NB 解决问题的更简单的解决方案是受欢迎的,但问题实际上是关于为什么我的代码中会发生这种情况。也就是说,为什么添加管道似乎会阻止脚本增加变量r?
这是脚本:
function uniqfile
{
local r=0
for arg in "$@"
do
readlink -e "$arg" || (( ++r ))
done #| sort -u ## remove that comment
return $r
}
Run Code Online (Sandbox Code Playgroud)