Çünkü bunun için düşüyorum, bir not bırakmak istiyorum. POSIX uyumlu olmak için eski bir sh komut dosyasını yeniden yazmak zorunda çünkü bu iş parçacığı bulundu. Bu temel olarak POSIX tarafından getirilen boru / alt kabuk sorununu aşağıdaki gibi kod yeniden yazarak atlatmak anlamına gelir:
some_command | read a b c
içine:
read a b c << EOF
$(some_command)
EOF
Ve şöyle kodlayın:
some_command |
while read a b c; do
# something
done
içine:
while read a b c; do
# something
done << EOF
$(some_command)
EOF
Ancak ikincisi boş girdide aynı şekilde davranmaz. Eski gösterimle while döngüsü boş girdiye girilmez, POSIX gösterimlerinde girilir! Bence bu, EOF'dan önceki yeni çizgiden kaynaklanamıyor. Eski gösterime daha çok benzeyen POSIX kodu şöyle görünür:
while read a b c; do
case $a in ("") break; esac
# something
done << EOF
$(some_command)
EOF
Çoğu durumda bu yeterince iyi olmalıdır. Ancak maalesef, some_command boş bir satır yazdırırsa, bu hala eski notasyon gibi davranmaz. Eski notasyonda while gövdesi idam edilir ve POSIX notasyonunda bedenin önünde kırılırız.
Bunu düzeltmek için bir yaklaşım şöyle görünebilir:
while read a b c; do
case $a in ("something_guaranteed_not_to_be_printed_by_some_command") break; esac
# something
done << EOF
$(some_command)
echo "something_guaranteed_not_to_be_printed_by_some_command"
EOF