텍스트를 별표로 표시

텍스트를 별표로 표시

그래서 그냥 간단한 프로그램을 사용해봤습니다. 그런데 문제는 특정 텍스트를 별표로 변경하여 텍스트를 숨기고 싶은데 별표나 점의 개수가 글자 개수와 동일하게 되기를 원한다는 것입니다. 이건 내 코드야...

#! /bin/bash
read -p 'Username:' name
read -sp 'Password:' pass
echo Confirm Username: $name?
echo Confirm Password: $pass?
echo Let us start the quiz :P
echo Q1 - Full form of MCQ
echo a - Maximum Capture Quest
echo b - Multiple Choice Question
read -p "Your Answer:" word
if [[ $word == "b" ]]
then
  echo "Correct! V.Good"
else
  echo "Wrong."
fi 

그래서 저는 이 부분을 다루고 싶습니다: echo Confirm Password: $pass?. 데이터를 저장하지 않아서 텍스트만 숨기고 싶습니다.

답변1

그렇다면 사용자가 비밀번호를 입력하면 blahblah무엇이 표시되어야 할까요 ********? 이는 그다지 큰 확인이 아니며 입력한 내용을 확인할 수 없습니다.

${var//pattern/replacement}그러나 문자열 대체 확장을 사용하면 (표준 POSIX 쉘이 아닌 Bash 및 기타 쉘에서) 이 작업을 수행할 수 있습니다 .

#!/bin/bash
read -sp "Password: " pass
echo
echo "Confirm Password: ${pass//?/*}"

?모든 문자 와 일치하고 //모든 항목을 바꾸도록 지시하므로 모든 문자가 별표로 변경됩니다. 따옴표가 없으면 단어가 파일 이름으로 확장되고 별표는 현재 디렉터리의 모든 파일과 일치합니다.

답변2

$ echo "hello there"
hello there

$ echo "hello there" | tr -c \\n \*
***********

이스케이프 문자의 필요성은 로컬 설정에 따라 다르며 시행착오가 필요합니다.

답변3

이는 정확한 해결책이 아닙니다. 그러나 bash를 사용하면 다음을 사용하여 비슷한 효과를 얻을 수 있습니다.이스케이프 시퀀스. 텍스트 섹션을 비교적 쉽게 삭제하거나 완전히 숨길 수 있습니다. 확인 줄을 다음과 같이 변경하세요.

echo Confirm Password: ^[[8m$pass^[[0m?

그러면 비밀번호의 모든 문자가 공백으로 인쇄됩니다. 취소선을 나타내기 위해 8을 9로 변경할 수 있습니다. 이러한 문자 는 ^[리터럴 문자가 아니라 ctrl+v, esc를 차례로 눌러 삽입할 ​​수 있는 특수 문자입니다.

문자 대신 별표를 인쇄해야 한다면 아래와 같이 함수를 정의하는 것이 좋습니다.

function nstars {
    for i in $(seq $1); do
        echo -n '*'
    done
}

그러면 이 함수는 다음과 같이 사용될 수 있습니다:

echo Confirm Password: $(nstars ${#pass})?

*를 와일드카드 문자로 사용하는 쉘을 방지하려면 일부 추가 이스케이프가 필요할 수 있습니다.

관련 정보