Zsh

測試命令的輸出是否為空字元串,如果不為空則列印結果

  • July 14, 2021

如果命令輸出空字元串,我正在使用來自 Test 的解決方案。除了這些解決方案之外,如果命令的輸出不為空,我還想列印它。

我想知道如果命令的輸出不為空,是否可以通過僅呼叫一次命令來列印命令的輸出。

我可以通過在 中重新呼叫相同的命令來做到這一點if condition,但是現在第二次呼叫可能會消耗額外的 CPU 使用率,因為我們已經獲得了它的結果。


可能的方法是,同一命令被呼叫兩次:

if [[ $(ls -A) ]]; then
   ls -A
else
   echo "no files found"
fi

output=$(git diff --ignore-blank-lines --color-words HEAD | tr -d ' \n\r\t ' | wc -c)
if [ "$output" -gt 0 ]; then
   git diff --ignore-blank-lines --color-words HEAD 
else
   echo "diff is empty"
fi

**注意:**這個問題最初被標記為bash,但 OP 已經聲明使用的 shell 是zsh. 這會使答案在某種程度上無效。

您可以將命令的輸出儲存在變數中並測試該變數是否為空:

output="$(your_command)"

if [[ -n $output ]]
then
   printf "%s\n" "$output"
else
   printf "No output\n"
fi

測試將-n檢查是否$output為非空字元串。如果是,$output將列印的內容。否則,將列印一條沒有產生輸出的消息。請注意,周圍的引號"$output"是必要的。

另請注意(如@ilkkachu 所述),命令替換將刪除尾隨換行符,因此如果您關心這些,則需要採用不同的方法。

引用自:https://unix.stackexchange.com/questions/657086