bash-IFS更改for循环中echo-n的行为

bash-IFS更改for循环中echo-n的行为,bash,Bash,我的代码需要在for循环中进行响应 在循环之前,我设置IFS=“\n” 在循环中,echo-n被忽略(最后一行除外) 注意:这只是echo-n 例如: 这将产生: 这是一个测试 这是一个测试 这是一个测试$ 用户提示仅出现在最后一行的末尾 为什么会发生这种情况?是否有修复程序?既不IFS=“\n”也不IFS='\n'将$IFS设置为换行符;相反,他们将其设置为literal\,后跟literaln 您必须使用以分配实际换行:IFS=$'\n';或者,您可以使用包含实际换行符(跨越2行)的普通字符

我的代码需要在for循环中进行响应

在循环之前,我设置
IFS=“\n”

在循环中,
echo-n
被忽略(最后一行除外)

注意:这只是
echo-n

例如:

这将产生:

  • 这是一个测试
  • 这是一个测试
  • 这是一个测试$
  • 用户提示仅出现在最后一行的末尾

    为什么会发生这种情况?是否有修复程序?

    既不
    IFS=“\n”
    也不
    IFS='\n'
    $IFS
    设置为换行符;相反,他们将其设置为literal
    \
    ,后跟literal
    n

    您必须使用以分配实际换行:
    IFS=$'\n'
    ;或者,您可以使用包含实际换行符(跨越2行)的普通字符串文字

    分配literal
    \n
    的效果是,
    cat文件
    的输出没有拆分成行,因为实际的换行符不在
    $IFS
    中;可能-虽然不是与示例文件内容一起-输出可能已按嵌入的
    \
    n
    字符拆分为字段。
    如果没有这两个选项,整个文件内容将立即传递,从而导致
    for
    循环的一次迭代


    也就是说,从文件中循环行的方法是;请尝试以下方法:

    while IFS= read -r line; do
      echo -n "$line"
    done < file
    
    而IFS=read-r行;做
    echo-n“$line”
    完成<文件
    
    既不
    IFS=“\n”
    也不
    IFS='\n'
    $IFS
    设置为换行;相反,他们将其设置为literal
    \
    ,后跟literal
    n

    您必须使用以分配实际换行:
    IFS=$'\n'
    ;或者,您可以使用包含实际换行符(跨越2行)的普通字符串文字

    分配literal
    \n
    的效果是,
    cat文件
    的输出没有拆分成行,因为实际的换行符不在
    $IFS
    中;可能-虽然不是与示例文件内容一起-输出可能已按嵌入的
    \
    n
    字符拆分为字段。
    如果没有这两个选项,整个文件内容将立即传递,从而导致
    for
    循环的一次迭代


    也就是说,从文件中循环行的方法是;请尝试以下方法:

    while IFS= read -r line; do
      echo -n "$line"
    done < file
    
    而IFS=read-r行;做
    echo-n“$line”
    完成<文件
    
    在bash中解析文件时,不要使用for循环。改用while循环。这里有一个非常好的教程


    在bash中解析文件时,切勿使用for循环。改用while循环。这里有一个非常好的教程


    尝试
    查找$中的行(IFS='\n'cat文件);do…
    无需对$中的行使用
    cat
    IFS
    尝试
    (IFS='\n'cat文件);执行…
    无需使用
    cat
    IFS