예:
내가 달릴 때
echo -e "\[\033[;33m\][\t \u (\#th) | \w]$\[\033[0m\]"
인쇄된 응답은 다음과 같습니다.
\[\][ \u (\#th) | \w]$\[\]
첫 번째 이후 와 마지막 이전의
\[
모든 것은\]
주황색 갈색입니다.그러나 명령 프롬프트를 다음으로 설정하면
\[\033[;33m\][\t \u (\#th) | \w]$\[\033[0m\]
명령 프롬프트는 다음과 같이 인쇄됩니다.
[21:55:17 {username} (89th) | {current directory path}]$
전체 명령 프롬프트는 주황색-갈색입니다.
어쨌든 내 질문은 다음과 같습니다. 명령 프롬프트 디자인( echo
, cat
등 less
포함)을 명령 프롬프트인 것처럼 인쇄할 수 있습니까?
답변1
Bash 4.4+에서는 인용된 콘텐츠를 생성하는 ${var@P}
방법과 유사하게 를 사용할 수 있습니다 .${var@Q}
var
3.5.3 쉘 매개변수 확장매뉴얼 페이지 하단에 있습니다.
$ printf "%s\n" "${var}"
\[\033[00;32m\]\w\[\033[00m\]\$
$ printf "%s\n" "${var@P}" |od -tx1z
0000000 01 1b 5b 30 30 3b 33 32 6d 02 2f 74 6d 70 01 1b >..[00;32m./tmp..<
0000020 5b 30 30 6d 02 24 0a >[00m.$.<
0000027
또는 없이 후자를 실행하는 경우 od
현재 경로가 녹색으로 표시되어야 합니다.
and for and를 인쇄 합니다 \001
. 이것들은 당신에게 별로 유용하지 않을 수도 있습니다. 임시 변수와 문자열 대체 확장을 사용하여 이를 제거할 수 있습니다.\002
\[
\]
$ printf -v pst "%s\n" "${var@P}"
$ pst=${pst//[$'\001\002']}
$ printf "%s\n" "$pst" |od -tx1z
0000000 1b 5b 30 30 3b 33 32 6d 2f 74 6d 70 1b 5b 30 30 >.[00;32m/tmp.[00<
0000020 6d 24 0a 0a >m$..<
0000024
Zsh에는 다음이 있습니다 print -P
.
$ print -P "%F{green}%d%F{normal}%#" |od -tx1z
0000000 1b 5b 33 32 6d 2f 74 6d 70 2f 61 61 61 1b 5b 33 >.[32m/tmp/aaa.[3<
0000020 39 6d 25 0a >9m%.<
및 매개변수 확장 플래그는 위 의 Bash와 유사 %
하므로 결과 문자열 을 .${(%)var}
${var@P}
print -v othervar -P "..."
othervar=${(%)var}
othervar
\u
Bash와 같은 경우 에는 and를 대신 \w
사용할 수 있지만 or와 같은 경우에는 쉽지 않을 수 있습니다.$USER
$PWD
\#
\j