
我正在使用下面的程式碼
record_count=0
task()
{
while read -r record ; do
record_count=$(( record_count + 1 ))
.....
done < $1
}
for i in {1..5}; do
task $i &
done
我如何使用從子shell\子程序到父shell\進程的record_count。我嘗試過,return record_count
但它不起作用。是否有其他方法傳回值(如果可能的話傳回多個值)
答案1
「return」用於退出程式碼,通常「0」表示成功,其他任何值表示失敗。而且它必須是小於 256 的整數,因此通常它對於傳回此處期望的結果類型沒有用處。
但是您的子流程可以以文字形式產生結果,然後主流程可以選擇擷取這些結果:
record_count=0
task()
{
while read -r record
do
record_count=$(( record_count + 1 ))
done <$1
echo $record_count
}
(
for i in {1..5}
do
task $i &
done
wait
) \
| sort
「等待」確保所有子流程在繼續之前都已完成。
請注意,對於並行進程,無法保證它們將以什麼順序完成,因此結果不一定以 1、2、3、4、5 的順序出現。
如果隨機順序有問題,程式可以向任務傳遞一個“密鑰”,並且該密鑰可用於對輸出進行排序。在這種情況下, $i 本身可能是鍵,但通常檔案名稱不會是簡單的整數。
答案2
只有當數字在 0 到 255 之間時,您才能使用return record_count
並獲得正確的結果。
for i in {1..5}; do
task $i ; echo $?
done