だから、単純なプログラムを使ってみました。ところで、問題は、特定のテキストをアスタリスクに変更してテキストを非表示にしたいのですが、アスタリスクやドットの数が文字の数と同じになりたいということです。これは私のコードです...
#! /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})?
*をワイルドカード文字として使用するシェルを防ぐには、いくつかの追加エスケープが必要になる場合があります。