字体:  

BASH中的read的强大的功能

ELM 发表于: 2007-9-16 23:36 来源: 榆树社区

以前只会简单的使用这个功能,也没有看过文档,只是从别的脚本中看到过一些使用方法,没有想到功能这么强大:

QUOTE:

read [-ers] [-u fd] [-t timeout] [-a aname] [-p prompt] [-n nchars] [-d delim] [name ...]
    One  line  is  read  from  the  standard input, or from the file descriptor fd supplied as an argument to the -u option, and  the first word is assigned to the first name, the second word to the second name, and so on, with leftover words and their  intervening  separators  assigned  to the last name.  If there are fewer words read from the input stream than names, the remaining names are  assigned  empty  values.  The characters in IFS are used to split the line into words.  The backslash character (\)  may  be used  to  remove any special meaning for the next character read and for line continuation.  Options, if supplied, have the  following meanings:
    -a aname
    The words are assigned to sequential indices of the array variable aname, starting at 0.  aname is unset before any new  values  are  assigned.   Other  name  arguments  are ignored.
    -d delim
    The first character of delim is  used  to  terminate  the input line, rather than newline.
    -e     If the standard input is coming from a terminal, readline (see READLINE above) is used to obtain the line.
    -n nchars
    read returns after reading nchars characters rather  than waiting for a complete line of input.
    -p prompt
    Display prompt on standard error, without a trailing newline, before attempting to read any input.  The prompt is displayed only if input is coming from a terminal.
   -r     Backslash does not act as an escape character.  The backslash is considered to be part of the line.  In  particular,  a  backslash-newline pair may not be used as a line continuation.
   -s     Silent mode.  If input is coming from a terminal, characters are not echoed.
   -t timeout
   Cause  read  to time out and return failure if a complete line of input is not read within timeout  seconds.  This option  has  no  effect if read is not reading input from the terminal or a pipe.
    -u fd  Read input from file descriptor fd.

    If no names are supplied, the line read is assigned to the ariable  REPLY.   The  return  code  is zero, unless end-of-file is ncountered, read times out, or an invalid  file  descriptor  is supplied as the argument to -u.

CODE:

read -p "how old r u? " age
echo $age
read -p "some words? " -a words
echo ${words[*]}
read -p "Password: " -s passwd                                 
echo $passwd
read -t 5 auth
echo $auth
read -n 1 key
read -dq -p "input something end with q: " menu
read -e file #在这试试命令历史和补齐功能
From: http://bbs.chinaunix.net/thread-237464-1-1.html

最新回复

ELM at 2007-9-16 23:38:01

CODE:

while read -u3 i && read -u4 j;do
echo $i $j
done 3<afile 4<bfile
呵呵,以前没有使用过的方法,不错

From: http://bbs.chinaunix.net/thread-237464-1-1.html