はじめに
バッシュread
コマンドは、標準入力からテキストを読み取る組み込みのユーティリティです。このツールは、ユーザー入力を読み取るための多くの機能を提供し、Bashスクリプトをインタラクティブにするのに役立ちます。
このガイドでは、Bashのread
について説明しています。 コマンドはさまざまな例と使用例で機能します。
前提条件
- コマンドライン/ターミナルへのアクセス。
- 環境変数の操作の基本。
Bash読み取り構文
Bashの構文read
コマンドは次のとおりです:
read <options> <arguments>
read
コマンドはユーザー入力を受け取り、文字列をフィールドに分割し、新しい各単語を引数に割り当てます。単語よりも変数が少ない場合は、read
残りの項を最終変数に格納します。
引数名の指定はオプションです。このコマンドは、ユーザーの入力を $REPLY
に保存します デフォルトでは変数です。
Bash読み取りオプション
バッシュread
コマンドには、ユーザー入力を制御するための多くのオプションが付属しています。一部のオプションは追加のパラメーターを必要としませんが、他のオプションには必須のパラメーターがあります。
次の表に、可能なすべてのコマンドオプションとその説明を示します。
オプション | 説明 |
---|---|
-a <array> | 指定された単語シーケンスを<array> という名前の変数に割り当てます 。 |
-d <delimiter> | 指定された<delimiter> まで行を読み取ります 新しい行の代わりに。 |
-e | 対話型シェルセッションを開始して、読み取る行を取得します。 |
-i <prefix> | 行をプレフィックスとして読み取る前に最初のテキストを追加します。 |
-n <number> | 指定された文字数を読み取った後、区切り文字を使用して早期に終了するようにした後、戻ります。 |
-N <number> | 区切り文字を無視して、指定された文字数を読み取った後に戻ります。 |
-p <prompt> | ユーザー入力を読み取る前にプロンプト文字列を出力します。 |
-r | バックスラッシュを無効にして文字をエスケープします。 |
-s | ユーザーの入力をエコーしません。 |
-t <time> | コマンドは、指定された時間(秒単位)の後にタイムアウトします。 |
-u <file descriptor> | 標準入力の代わりにファイル記述子から読み取ります。 |
読み続けて、読み取りコマンドを確認してください さまざまな例で機能します。
Bash読み取りの例
read
コマンドは引数やオプションなしで機能します。コマンドをテストするには、次の手順に従います。
1.ターミナルを開きます。
2.コマンドを記述し、 Enterを押します :
read
プロンプトはユーザー入力を待ちます。
3.文を入力して、 Enterを押します 。
端末は通常の状態に戻ります。
4. echoコマンドを使用してメッセージを取得します:
echo $REPLY
$REPLY
変数はread
を格納します コマンドメッセージ。
以下は、Bash read
のより複雑なユースケースを示す例です。 コマンド。
引数
引数を指定して、ユーザー入力を指定された変数に保存します:
read input
次のメッセージを取得します:
echo $input
または、ユーザー入力を分割 複数の引数を追加して、さまざまな変数に変換します。
例:
read var1 var2
ユーザー入力は個々の単語に分割されます。でそれらを取得します:
echo $var1
echo $var2
ユーザー入力に変数よりも多くの単語が含まれている場合、最後に提供された変数に追加の単語が割り当てられます。
read var1 var2
foo bar baz
echo $var1
echo $var2
変数よりも単語が少ない場合、残りの変数は空です。
配管
配管は、あるコマンドから標準出力を受け取り、それを別のプロセスの標準入力として解析します。 echo
を使用する 情報をread
にパイプします 即時解析用。例:
echo "Hello world!" | (read var1 var2; echo $var1; echo $var2)
括弧は複数のコマンドでサブシェルを作成し、個々の変数はコンソールに出力されます。
ヒアドキュメント
read
にテキストを入力する別の方法 コマンドはヒアドキュメント表記を使用しています。例:
read var1 var2 <<< "Hello world!"
echo $var1
echo $var2
read
コマンドは、入力ストリームリテラルとリダイレクト識別子( <<<
)を必要とします )herestringを入力します。
区切り文字
read
コマンドは2つの区切り文字タイプを定義します:
1.read
の区切り文字 指図。
デフォルトでは、 Enterを押します (改行)コマンドを終了します。 -d
を追加します タグを付け、引用符で別の区切り文字を指定して、別の方法で終了します。
例:
read -d "-"
新しい行の代わりに、新しい区切り文字はダッシュ( -
)です。 )改行の代わりに。コマンドは、引数の数を無視して、区切り文字に到達すると終了します。 $REPLY
の応答 または、提供された変数は、ダッシュなしでユーザー入力を格納します( -
。
2.フィールドを分割するための区切り文字。
変数$IFS
(Internal Field Separator)は、単語の区切り文字を格納します。単語を分割するデフォルト値はスペース""です。 $IFS
を設定します この動作を制御するために別の値に変数を設定します。
たとえば、単語をダッシュで区切るには、次を使用します。
IFS="-"
echo "Hello-world!" | (read var1 var2; echo $var1; echo $var2)
異なる区切り文字を追加して、フィールドを異なる値で分割します:
IFS="-_"
echo "Hello_world-!" | (read var1 var2 var3; echo $var1; echo $var2; echo $var3)
区切り文字の長さは1文字で、 $IFS
記載されている各仕切りを個別に取得します。
プロンプト
readコマンドを使用して、対話型プロンプトを作成します。 -p
を追加します タグを付けて、プロンプトテキストを入力します。例:
read -p "Enter your username: " username
プロンプトテキストが印刷され、ユーザー入力が必要です。テキストは変数$username
に保存されます 。
echo Your username is $username.
-p
を使用します プロンプト作成で機能するBashスクリプトのオプション。
ユーザー入力を非表示にする
read
コマンドは-s
を提供します 機密情報の入力を非表示にするタグ。一般的な使用例は、 -s
を組み合わせることです。 -p
を使用 タグを付けてパスワードプロンプトを作成します。
例:
read -p "Enter your password: "$'\n' -s password
ユーザーの入力は表示されません。ただし、メッセージをエコーすると、パスワードが表示されます:
echo $password
read
を使用する場合は、この動作に注意してください パスワードの入力を求めるスクリプトで。
文字数制限の設定
readコマンドは、ユーザー入力の文字数を制限するときに2つのオプションを提供します。
1. -n
を使用します オプションで、文字数制限を設定するための番号を指定します。例:
read -n 3
Enterを押します 1文字後、文字数制限に達する前にコマンドを終了します。 Enterを押さずに 、コマンドは3文字後に自動的に終了します。
2. -N
を使用します オプションを指定し、区切り文字を無視して文字数制限を設定するための数値を指定します。例:
read -N 3
Enterを押す コマンドを終了しません。ただし、キーストロークは文字としてカウントされます。
タイムアウトの設定
read
にタイムアウトを設定します テキストの入力にかかる時間を制限するには:
read -t 5
コマンドは、指定された制限時間後に自動的に終了します。
配列
個々の変数を使用して文字列を格納する代わりに、 -a
を追加します 入力を配列に保存するオプション。例:
read -a array <<< "Hello world!"
次のコマンドで配列要素を取得します:
echo ${array[0]}
echo ${array[1]}
または、forループを使用して配列を反復処理します。
エスケープ文字と円記号
read
コマンドを使用すると、円記号を使用して長い入力を複数の行に分割できます。例:
read password prompt terminal output
Hello \
world\
!
Enterを押す バックスラッシュの後はコマンドを終了せず、次の行にさらに入力する必要があります。
バックスラッシュの解釈を無視するには、 -rを追加します オプション:
read -r <<< "Hello\world!"; echo $REPLY
このオプションは、ファイルパスや、円記号に意味があるテキストを解析するときに使用します。