壳变量值传递给子壳?

时间:2019-03-21 12:51:59

标签: shell

我正在用shell编写脚本,就像这样:

temp=0
while true; do
    case "a" in
        a) temp=5; ;;
    esac
    break
done | echo "$temp"

(温度值是条件,如果在子外壳中,则需要|(管道)作为标准输出重定向到标准输入) 我需要温度为5,但回波为0。有什么办法可以保留大小写内的值(如果没有tempfile,可能正确)?

1 个答案:

答案 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"