Zsh
測試命令的輸出是否為空字元串,如果不為空則列印結果
如果命令輸出空字元串,我正在使用來自 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 所述),命令替換將刪除尾隨換行符,因此如果您關心這些,則需要採用不同的方法。