我有一個bash
腳本,用于printf
列印一些彩色的 STDOUT。我注意到有時它會插入空格:
#!/usr/bin/env bash
### define colors
BLACK=$(tput setaf 0)
RED=$(tput setaf 1)
GREEN=$(tput setaf 2)
YELLOW=$(tput setaf 3)
LIME_YELLOW=$(tput setaf 190)
POWDER_BLUE=$(tput setaf 153)
BLUE=$(tput setaf 4)
MAGENTA=$(tput setaf 5)
CYAN=$(tput setaf 6)
WHITE=$(tput setaf 7)
BRIGHT=$(tput bold)
NORMAL=$(tput sgr0)
BLINK=$(tput blink)
REVERSE=$(tput smso)
UNDERLINE=$(tput smul)
### 0. CHECK
# 1. docker
echo
printf "@s\n" " 0.1. checking ${BRIGHT}${GREEN}docker${NORMAL} ..."
if [ ! "$(command -v docker)" ]; then
printf "@s\n" " -> Please install ${BRIGHT}${GREEN}docker${NORMAL} first: ${BLUE}${UNDERLINE}https://github.com/cccnrc/diagnosticator-mac#dependencies${NORMAL}"
exit 1
else
printf "@s\n" " -> ${BRIGHT}${GREEN}docker${NORMAL} found"
fi
# 2. docker-compose
printf "@s\n" " 0.2. checking ${BRIGHT}${GREEN}docker-compose${NORMAL} ..."
if [ ! "$(command -v docker-compose)" ]; then
printf "@s\n" " -> Please install ${BRIGHT}${GREEN}docker-compose${NORMAL} first: ${BLUE}${UNDERLINE}https://github.com/cccnrc/diagnosticator-mac#dependencies${NORMAL}"
exit 1
else
printf "@s\n" " -> ${BRIGHT}${GREEN}docker-compose${NORMAL} found"
fi
echo
我得到了這個輸出:
當命令空格完全相同時,為什么前面的空格-> docker found
比-> docker-compose found
行多得多?printf
uj5u.com熱心網友回復:
顏色代碼也占用位元組,但不可見。你必須考慮到它們。
printf "%*s\n" \
$((40 ${#BRIGHT} ${#GREEN} ${#NORMAL})) \
" -> ${BRIGHT}${GREEN}docker${NORMAL} found"
在 Bash 而不是:
如果 [ !“$(命令 -v 碼頭工人)”]
(無論如何更喜歡,但是)更喜歡[[
:[
if hash docker 2>/dev/null
hash
將散列命令位置,這將使任何后續呼叫更快,因為 Bash 不必再次查找命令。并且都$(
生成[
一個子行程,這比呼叫 builtin 慢得多hash
。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/425936.html
上一篇:如何拒絕bash中的字符?