Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何将文本文件读取到参数_Linux_Bash_Shell - Fatal编程技术网

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

  • aaaa0000应该是
    用户
  • aaaa0001@gmail.com应该是电子邮件
  • 当我尝试以下方法时

    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