我想使用一個命令列印在與字串相同的行上。例如,我想列印如下內容:
主機名:cpu1
但是當我使用這樣的命令時它不起作用
echo 'hostname:' hostname
uj5u.com熱心網友回復:
您需要使用$()來評估: echo 'hostname:' $(hostname)
uj5u.com熱心網友回復:
這是你應該做的:
echo "hostname: `hostname`"
用反引號括起來的單詞即使在字串中也會被命令列讀取為命令,就像在這種情況下一樣。
祝你有美好的一天!:)
uj5u.com熱心網友回復:
已經給出了兩個答案,說您“需要”和“應該”通過以下方式使用命令替換:
echo "hostname: $(hostname)"
但我不同意兩者。雖然這有效,但它在美學上并不吸引人。該命令指示 shell 運行hostname并讀取其輸出,然后將該輸出作為引數的一部分傳遞給 echo。但所有這些作業都是不必要的。對于這個簡單的用例,做起來“更簡單”:
printf "hostname: "; hostname
(使用 printf 來抑制換行符,并避免echo -n因為echo真的應該被視為已棄用)。這樣,主機名的輸出直接進入 shell 的標準輸出,而不需要 shell 完成任何額外的作業。我將“更簡單”放在引號中,因為可以提出一個人類發現printf "hostname: %s\n" "$(hostname)"或echo "hostname: $(hostname)"更簡單的論點,并且也許查看許多以這種方式做事的代碼會扭曲你的想法,甚至讓它看起來更簡單,但是片刻的反思應該會揭示這一點確實不是。
OTOH,收集輸出并使用 echo/printf 寫入訊息是有正當理由的。特別是,通過這種方式,訊息將(很可能)由一個系統呼叫撰寫,并且不會與來自其他行程的訊息交錯。如果您printf先執行然后執行hostname,其他行程的資料可能會寫入 的輸出printf和 的輸出之間hostname。一如既往,YMMV。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/491437.html
