簡體   English   中英

將輸出存儲到變量bash中

[英]Storing output into variable bash

我試圖將gawk的結果附加到相應的文件,並使用for循環到目錄基線中的所有文件:

#! /bin/sh

for file in baselines/*; do numThreads=$(echo $file | gawk 'BEGIN { FS = "." } ; {print $3 }') echo "Number of Threads: $numThreads" >> $file; done

但是numThreads變量沒有分配給任何東西,因此它將“Number of Threads:”附加到文件中。

文件夾基線包含is.A.2.baselineis.A.4.baselineis.A.8.baseline等文件,所以我希望附加“線程數:2”,“線程數: 4“和”線程數:8“分別......

你的問題是缺少換行符(或者,在extremis中,分號)。 你的腳本是:

for file in baselines/*; do numThreads=$(echo $file | gawk 'BEGIN { FS = "." } ; {print $3 }') echo "Number of Threads: $numThreads" >> $file; done

echo "Number of Threads..."部分之前,您需要換行符或分號。 像這樣可讀性:

for file in baselines/*
do
    numThreads=$(echo $file | gawk 'BEGIN { FS = "." } ; {print $3 }')
    echo "Number of Threads: $numThreads" >> $file
done

如果您堅持編寫不可讀的代碼,請這樣:

for file in baselines/*; do numThreads=$(echo $file | gawk 'BEGIN { FS = "." } ; {print $3 }'); echo "Number of Threads: $numThreads" >> $file; done

但請不要再將這樣的代碼發送到Stack Overflow進行審核/修訂,因為它很難閱讀,人們也不會費心去回答難以閱讀代碼的問題。

順便說一句,你的代碼所做的是非常巧妙的錯誤。 它運行echo命令,並將環境變量numThreads設置為正確的值, 參數列表的擴展在此之前發生,因此numThreads為空,因為評估了"Number of Threads: $numThreads"字符串。 證明這一點的一種方法是:

for file in baselines/*
do
    numThreads=$(echo $file | gawk 'BEGIN { FS = "." } ; {print $3 }') env | grep numThreads
done

這將打印環境變量的值。 證明它的另一種方式是:

for file in baselines/*
do
    numThreads=$(echo $file | gawk 'BEGIN { FS = "." } ; {print $3 }') sh -c 'echo numThreads=$numThreads'
done

在單獨的語句中執行變量賦值和echo:

for file in baselines/*; do
    numThreads=$(echo $file | gawk 'BEGIN { FS = "." } ; {print $3 }')
    echo "Number of Threads: $numThreads" >> $file
done

變量擴展在執行任何操作之前發生,因此當您將它們放在一行上時,變量會在分配之前展開。 只有當您臨時設置將在子進程中訪問的環境變量時才應使用該語法,而不是在為當前進程設置shell變量時使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM