Linux 如何将文本文件读取到参数
我已经创建了包含以下模式的文件Linux 如何将文本文件读取到参数,linux,bash,shell,Linux,Bash,Shell,我已经创建了包含以下模式的文件 aaaa0000 aaaa0000@gmail.com bbbb0001 bbbb0001@gmail.com … 我需要从这个文件中读取值并将其放入变量 e、 g aaaa0000应该是用户 aaaa0001@gmail.com应该是电子邮件 当我尝试以下方法时 while IFS= read -r file; do [[ $email == *@* ]] && [[ $user==“%s%18d\n”]] 我没有得到正确的值。 我
aaaa0000 aaaa0000@gmail.com
bbbb0001 bbbb0001@gmail.com
…
我需要从这个文件中读取值并将其放入变量
e、 g
用户
while IFS= read -r file; do
[[ $email == *@* ]] && [[ $user==“%s%18d\n”]]
我没有得到正确的值。
我应该如何将其更改为将创建的用户和电子邮件值读取为变量 将要解析内容的变量的名称作为参数传递给
read
:
while read -r user email; do
echo "User <${user}> has email <${email}>"
done
在读取-r用户电子邮件时;做
回显“用户有电子邮件”
完成
有关详细讨论,请参见。将要解析内容的变量的名称作为参数传递给
read
:
while read -r user email; do
echo "User <${user}> has email <${email}>"
done
在读取-r用户电子邮件时;做
回显“用户有电子邮件”
完成
有关详细讨论,请参见。我不需要使用IFS?在这种情况下,如果您希望将一行拆分为多个变量,则不能将
IFS
设置为空字符串,因为它的值告诉shell使用哪些字符进行拆分……另一方面,如果您希望它仅在选项卡上拆分(例如),您可以设置IFS=$'\t'
,然后只使用制表符进行分隔,空格将被视为值的一部分;do echo“User has email”done<在不知道您的awk
脚本输出的情况下,很难进行评论。也就是说,尝试用以下内容替换流程替换:我不需要使用IFS?在这种情况下,如果希望将一行拆分为多个变量,则不能将IFS
设置为空字符串,因为它的值告诉shell该拆分使用哪些字符……另一方面,如果您希望它只在选项卡上拆分(例如),可以设置IFS=$'\t'
,然后只使用选项卡进行分隔,空格将被视为值的一部分;do echo“User has email”done<在不知道您的awk
脚本输出的情况下,很难进行评论。也就是说,尝试用以下内容替换流程替换:在这里询问之前,请考虑运行代码。这将捕获一些明显的位,比如第二个==
和最后一个]
之前缺少空格,或者使用“智能引号”而不是ASCII引号。另一件事是,[[$foo==$bar]
不分配或修改foo
——它只是一个比较运算符,而不是一个识别printf
/scanf
占位符的运算符;如果您想使用扩展测试语法从数据中提取内容,请参阅BasHueRead在考虑运行代码之前,在这里询问它。这将捕获一些明显的位,比如第二个==
和最后一个]
之前缺少空格,或者使用“智能引号”而不是ASCII引号。另一件事是,[[$foo==$bar]
不分配或修改foo
——它只是一个比较运算符,而不是一个识别printf
/scanf
占位符的运算符;如果要使用扩展测试语法从数据中提取内容,请参阅中的BASH_REMATCH