我正在用shell编写脚本,就像这样:
temp=0
while true; do
case "a" in
a) temp=5; ;;
esac
break
done | echo "$temp"
(温度值是条件,如果在子外壳中,则需要|(管道)作为标准输出重定向到标准输入) 我需要温度为5,但回波为0。有什么办法可以保留大小写内的值(如果没有tempfile,可能正确)?
答案 0 :(得分:0)
您想要这样吗?打印5和0。
#!/bin/sh
temp=0
while true; do
case "a" in
a) temp=5; echo "$temp" ;;
esac
break
done | cat
echo "temp unchanged because of subshell $temp"
这对您有帮助吗? 我仍然不知道为什么需要管道,以及如何期望管道中的其他命令对状态做出反应。这不是它的工作方式。您可以在脚本中评估条件并相应地调用命令。
#!/bin/sh
filter(){
data=''
while read line; do
case "$line" in
temp=5) temp=5 ;;
*) data=$(printf '%s\n' "$data"; printf '%s\n' "$line") ;;
esac
done
if [ "$temp" -eq 5 ]; then
echo "do this 5 with data"
else
echo "do that other with data"
echo "$data"
fi
}
temp=0
while true; do
case "a" in
a) temp=5; printf 'temp=%s\n' "$temp"; for i in $(seq 1 30); do echo "30 lines"; done ;;
esac
break
done | filter
echo "temp unchanged because of subshell $temp"