GNU/Linux >> Linux の 問題 >  >> Linux

Bash読み取りコマンド

Bashには、コマンドラインまたはシェルスクリプトで使用できる多数の組み込みコマンドが付属しています。

この記事では、組み込みの readについて説明します。 コマンド。

バッシュ読み取り ビルトイン#

読む は、標準入力(またはファイル記述子)から行を読み取り、その行を単語に分割するbash組み込みコマンドです。最初の単語は名に割り当てられ、2番目の単語は2番目の名前に割り当てられます。

readの一般的な構文 ビルトインは次の形式を取ります:

read [options] [name...]

コマンドがどのように機能するかを説明するには、ターミナルを開き、 read var1 var2と入力します。 、「Enter」を押します。コマンドは、ユーザーが入力を入力するのを待ちます。 2つの単語を入力して、「Enter」を押します。

read var1 var2Hello, World!

単語は、 readに渡される名前に割り当てられます 引数としてのコマンド。 echoを使用する またはprintf 確認するには:

echo $var1echo $var2
Hello,
World!

ターミナルで入力する代わりに、標準入力を readに渡すことができます パイピング、here-string、heredocなどの他の方法を使用する:

echo "Hello, World!" | (read var1 var2; echo -e "$var1 \n$var2")
読む およびecho 括弧で囲まれ、同じサブシェルで実行されます。
Hello,
World!

here文字列とprintfを使用した例を次に示します。 :

read -r var1 var2 <<< "Hello, World!"printf "var1: %s \nvar2: %s\n" "$var1" "$var2"
Var1: Hello, 
Var2: World! 

readに引数が指定されていない場合 コマンドを実行すると、行全体が REPLYに割り当てられます。 変数:

echo "Hello, world!" | (read; echo "$REPLY")
Hello,
World!

readに提供された引数の数の場合 入力から読み取られた単語の数よりも大きい場合、残りの単語は名前に割り当てられます:

echo "Linux is awesome." | (read var1 var2; echo -e "Var1: $var1 \nVar2: $var2")
Var1: Linux 
Var2: is awesome.

それ以外の場合、引数の数が名前の数より少ない場合、残りの名前に空の値が割り当てられます。

echo "Hello, World!" | (read var1 var2 var3; echo -e "Var1: $var1 \nVar2: $var2 \nVar3: $var3")
Var1: Hello, 
Var2: World! 
Var3: 

デフォルトでは、 read バックスラッシュをエスケープ文字として解釈します。これにより、予期しない動作が発生する場合があります。バックスラッシュのエスケープを無効にするには、 -rを指定してコマンドを呼び出します。 オプション。

以下は、 readの例です。 -rの有無にかかわらず呼び出されたときに機能します オプション:

read <<< "Hello, \tWorld!"printf %s "$REPLY"
Hello, tWorld!
read -r <<< "Hello, \tWorld!"printf %s "$REPLY"
Hello, \tWorld!

通常、常に readを使用する必要があります -rを使用 オプション。

区切り文字の変更#

readのデフォルトの動作 1つ以上のスペース、タブ、および改行を区切り文字として使用して、行を単語に分割することです。別の文字を区切り文字として使用するには、その文字を IFSに割り当てます。 変数(内部フィールドセパレーター)。

echo "Linux:is:awesome." | (IFS=":" read -r var1 var2 var3; echo -e "$var1 \n$var2 \n$var3")
Linux 
is 
awesome.

IFSの場合 スペースまたはタブ以外の文字に設定されている場合、単語は1文字だけで区切られます:

echo "Linux::is:awesome." | \  (IFS=":" read -r var1 var2 var3 var4; echo -e "Var1: $var1 \nVar2: $var2 \nVar3: $var3 \nVar4: $var4")

行は4つの単語で区切られます。 2番目の単語は、区切り文字間のセグメントを表す空の値です。これは、2つの区切り文字を並べて使用したために作成されました( ::

Var1: Linux 
Var2:  
Var3: is 
Var4: awesome.

複数の区切り文字を使用して行を分割できます。複数の区切り文字を指定する場合は、文字を IFSに割り当てます。 それらの間にスペースを入れずに変数。

_を使用した例を次に示します。 - 区切り文字として:

echo 'Linux_is-awesome.' | (IFS="-_" read -r var1 var2 var3; echo -e "$var1 \n$var2 \n$var3")
Linux 
is 
awesome.

プロンプト文字列#

インタラクティブなbashスクリプトを作成するときは、 readを使用できます。 ユーザー入力を取得するコマンド。

プロンプト文字列を指定するには、 -pを使用します オプション。プロンプトは、 readの前に出力されます 実行され、改行は含まれません。

簡単な例を次に示します。

read -r -p "Are you sure?"

通常、 readを使用します while内のコマンド ループして、ユーザーに期待される答えの1つを与えるように強制します。

以下のコードは、システムの再起動をユーザーに促します:

while true; do
    read -r -p "Do you wish to reboot the system? (Y/N): " answer
    case $answer in
        [Yy]* ) reboot; break;;
        [Nn]* ) exit;;
        * ) echo "Please answer Y or N.";;
    esac
done

シェルスクリプトがユーザーにパスワードなどの機密情報の入力を求める場合は、 -sを使用します readを指示するオプション 端末に入力を出力しないようにします:

read -r -s -p "Enter your password: "
単語を配列に割り当てる#

変数名の代わりに単語を配列に割り当てるには、 readを呼び出します。 -aを使用したコマンド オプション:

read -r -a MY_ARR <<< "Linux is awesome."

for i in "${MY_ARR[@]}"; do 
  echo "$i"
done
Linux 
is 
awesome.

配列と変数名の両方を指定すると、すべての単語が配列に割り当てられます。

結論#

read コマンドは、入力行を単語に分割するために使用されます。


Linux
  1. Bash スクリプト - Hello World の例

  2. bash エクスポート コマンド

  3. bash sh - コマンドが見つかりません

  1. Bashの「評価」コマンド?

  2. bash から apachectl を起動する

  3. Bash - 日付コマンドとスペース

  1. Bashトラップコマンドの説明

  2. jenkins パイプラインで bash コマンドを実行する

  3. 単一行の場合はバッシュ