我有两个脚本:
在 bash 中
#!/bin/bash H_VARIABLE=empty echo "Zeile1 Zeile2" | while read satz do H_VARIABLE="$H_VARIABLE $satz" done echo H_VARIABLE=$H_VARIABLE
结果:
H_VARIABLE=empty
在 ksh 中
#!/usr/bin/ksh H_VARIABLE=leer echo "Zeile1 Zeile2" | while read satz do H_VARIABLE="$H_VARIABLE $satz" done echo H_VARIABLE=$H_VARIABLE
结果:
H_VARIABLE=leer Zeile1 Zeile2
结论:leer Zeile1 Zeile2
!=leer
我在 bash 中该做什么才能获得与 ksh 相同的响应?
答案1
这里的问题是,在 bash 中,while
当循环位于管道的 RHS 上时,它会在子 shell 中执行。你可以改为这样做
H_VARIABLE=leer
while read satz
do H_VARIABLE="$H_VARIABLE $satz"
done < <(
echo "Zeile1
Zeile2"
)
使用流程替换,或者使用这里是字符串
H_VARIABLE=leer
while read satz
do H_VARIABLE="$H_VARIABLE $satz"
done <<< "Zeile1
Zeile2"
也可以看看bash 脚本 var 在循环后没有改变