使用while命令分割字符串失效,寻求解决方法
问题解决:Bash按可配置分隔符分割字符串
你的脚本无法分割字符串的原因是:read -r name默认读取整行内容,即便设置了IFS='|',但仅当指定多个变量时,IFS才会用于分割字段。单一变量会接收整行输入,所以输出原样。
以下是几种可行的解决方法:
方法一:利用数组分割遍历
#!/bin/bash IFS='|' read -ra names <<< "one|two|three" for name in "${names[@]}"; do echo "$name" done
- 用
read -ra将分割后的内容存入数组names,再通过循环逐个输出数组元素。
方法二:用tr命令替换分隔符
echo "one|two|three" | tr '|' '\n'
- 直接将字符串中的
|替换为换行符,快速实现每行一个元素的输出。
方法三:用read -d按分隔符逐段读取
#!/bin/bash str="one|two|three" while IFS= read -r -d '|' name; do echo "$name" done <<< "$str|"
read -d '|'以|作为读取终止符,在输入字符串末尾追加|确保最后一个元素也能被读取。
内容的提问来源于stack exchange,提问作者simonarame
相关产品推荐
相关产品推荐

