相關的存根是這樣的:
tag=('*' '#')
i=0
function output()
{
ifs="$IFS"
IFS=$'\n'
for line in $@
do
echo $'\t' "${tag[$i]}" $line
done
IFS="$ifs"
echo $i
i=$((i 1))
echo $i
i=$((i%2))
echo $i
}
output a|tee README
output b
我想做的是:
每次executeoutput輸出一個訊息塊時,${tag[$ind]}可以使用不同的prefix( )來將自身與背景關系區分開來。此外,部分訊息可以重定向到檔案。
它的結果是:
* a
0
1
1
* b
0
1
1
使用管道|tee README,變數$i已重置為0.
為什么會這樣,我能不能按照這個思路實作這個功能?
謝謝。
uj5u.com熱心網友回復:
發生這種情況的原因是,如Bash 手冊所述,管道中的每個命令都作為單獨的行程(即,在子外殼中)執行。
為了保留i變數值,我建議您將這兩個output呼叫包含在一個 shell 行程中,如下所示:
#!/bin/bash
tag=('*' '#')
i=0
function output()
{
ifs="$IFS"
IFS=$'\n'
for line in $@
do
echo $'\t' "${tag[$i]}" $line
done
IFS="$ifs"
echo $i
i=$((i 1))
echo $i
i=$((i%2))
echo $i
}
(
output a
output b
) | tee README
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/358772.html
上一篇:BASH:執行存盤在陣列中的命令
