我一直在谷歌搜索但没有结果,所以我将非常感谢有人能提供帮助。
我有一串将要生成的文件名,每个文件名由字符 分隔|
。
例如,文件名字符串类似于:
/home/user/something or other.txt|/home/user/Downloads/something else.txt|/home/somewhere/there are spaces definitely.txt|/home/user/there are always spaces.txt|/home/user/Documents/spaces are always present.txt
我想将这个字符串拆分成一个数组,使用字符|
来拆分文件名及其位置。
我尝试过这个:
IFS='|' read -ra array <<< "$string"
但它不起作用并给了我以下错误信息:
Syntax error: redirection unexpected
也许有人比我聪明得多,有解决方案吗?我将不胜感激!
答案1
您的代码是正确的 -对于 bash
我在 .sh 文件顶部有 #!/bin/bash
好的
然后我运行 sh filename.sh 来运行它。
问题就在这里 - 你明确地告诉系统忽略shebang,并使用 运行脚本sh
。这很可能解决了Ubuntu 上默认的/bin/sh
POSIX shell 是什么。dash
相反,只需让你的脚本可执行
chmod +x filename.sh
然后使用运行它
./filename.sh
这将确保使用正确的解释器。另请参阅
答案2
使用 mapfile 将字符串读入具有用户定义分隔符的索引数组:
$ string='1|2|3|4'; \
mapfile -td \| <<< $string; echo ${MAPFILE[@]}