read是Linux shell中用于从标准输入或文件中读取数据的内置命令,基本语法如下:
read [options] [variable_name]
| 选项 | 描述 |
|---|---|
| -p "prompt" | 显示提示信息 |
| -s | 静默模式(不显示输入内容,适合密码输入) |
| -n N | 只读取N个字符 |
| -t timeout | 设置超时时间(秒) |
| -a array | 将输入读入数组 |
| -d delimiter | 指定输入结束符(默认是换行符) |
read name
echo "Hello, $name"
read -p "Please enter your name: " name
read -s -p "Enter your password: " passwd
while read line; do
echo "$line"
done < filename.txt
read -a words <<< "$(cat filename.txt)"
echo "${words[@]}"
IFS=',' # 设置分隔符为逗号
while read -r field1 field2 field3; do
echo "Field1: $field1, Field2: $field2, Field3: $field3"
done < data.csv
if read -t 5 -p "Enter something within 5 seconds: " input; then
echo "You entered: $input"
else
echo "Time out!"
fi
read -n 10 -p "Enter up to 10 characters: " input
read -d ":" -p "Enter text ending with ':': " input
read默认会删除行首和行尾的空白字符,使用-r选项可以保留原样:read -r line
处理包含特殊字符的文件时,建议总是使用-r选项
在循环中读取文件时,重定向应放在done之后,而不是while之后
对于大文件处理,逐行读取比一次性读取更高效
#!/bin/bash
while IFS=',' read -r col1 col2 col3; do
echo "Column 1: $col1"
echo "Column 2: $col2"
echo "Column 3: $col3"
echo "------------------"
done < data.csv
#!/bin/bash
while IFS='=' read -r key value; do
# 跳过注释行和空行
[[ "$key" =~ ^#.*$ ]] || [[ -z "$key" ]] && continue
echo "Key: $key, Value: $value"
done < config.ini
通过掌握read命令的各种用法,可以灵活处理各种输入场景,特别是在shell脚本中处理用户输入和文件内容时非常有用。