這可能是一個簡單/這到底是什么問題:這里是腳本的藍圖,我在函式“myloop”中加載 4 個變數 $1 $2 $3 和 $4 說
file1
1 2 3
1 4 5
1 6 7
myloop () {
echo col=$1 $2 $3 $4
awk -v c1="$1" -v c2="$2" -F, 'BEGIN {
FS=" ";
}
{
xy =($c1*$c2);
}
END {
print "Product" $3 "and " $4 #this is where $3 (='h2') and $4 (='02') don't print
print "prod= " xy;
}' file1 > res.txt
}
myloop 2 3 h2 o2
res.txt 中的預期輸出
product h2 and 02
prod = 68
所以正如我在代碼的注釋行中所說,我無法閱讀 $3 和 $4。
我嘗試使用 $3 和 $4 傳遞
awk -v c1="$1" -v c2="$2" -vl1="$3" -v l2="$4" ...,然后在 print 陳述句中呼叫 $l1 和 $l2 但這不起作用。
任何提示將不勝感激,因為我不是腳本專家(如您所知)
提前謝謝
uj5u.com熱心網友回復:
$ cat tst.sh
#!/usr/bin/env bash
myloop() {
echo "col=$*"
awk -v c1="$1" -v c2="$2" -v l1="$3" -v l2="$4" '
{
xy = $c1 * $c2
}
END {
print "Product", l1, "and", l2
print "prod =", xy 0
}
' file1
}
myloop 2 3 h2 o2
$ ./tst.sh
col=2 3 h2 o2
Product h2 and o2
prod = 68
l1并且l2對于變數名來說是不好的選擇,因為在許多字體中l看起來太像1了,所以會混淆你的代碼。
順便說一句,在您的問題代碼中,這是:
awk -F,
正在將 FS 從其默認值的空白更改為逗號,然后是:
BEGIN {
FS=" ";
}
正在將其設定回它必須開始的默認空白值。只是不要那樣做。
uj5u.com熱心網友回復:
您正在尋找的是所謂的字串插值,可以像這樣執行:
print "Product ${3} and ${4}"
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/497376.html
