【发布时间】:2020-09-02 14:09:10
【问题描述】:
在 bash 中,在一些 StackOverflow 答案中,它们展示了如何填充结果以将文件查找到数组中:
信息 1
旧的 bash 版本
mapfile -d $'\0' array < <(find . -name "${input}" -print0)
或更新的 bash 版本:(4.2+)
readarray -d '' array < <(find . -name "$input" -print0)
信息 2
然后还有这个把一个字符串拆分成一个数组但这对我不起作用。
readarray -d '|' PORTS <<< "${matched}"
我成功使用了这个,但这是旧语法。
IFS='|' read -r -a PORTS <<< $matched
这些答案并没有解释完整的语法:
谁能解释一下:
信息 1:
在普通( 括号之前的< 括号是做什么的?如果我添加 space 和/或用 $ 替换它,则命令失败。但我想了解这是在做什么。
信息 2:
我在某处找到了 readarray 的这种语法,但它对我不起作用,因此括号 < 展示位置可能是同样的问题。如何正确使用?
【问题讨论】:
-
对于
<( ... )参见 process substitution,对于 readarray 参见 mapfile,-t可能有助于删除分隔符 -
我知道
$( ... )子进程,但我认为<可能只是一个替代字符。你有什么好的资源可以让我阅读更多吗? -
谢谢,您的更新评论与链接很清楚。我现在明白它的意思了,它还解释了你不能使用空格(就像我试过的那样),因为那样意义就不同了。
-
-d是读取的选项,但不是 readarray aka mapfile。你需要使用类似IFS='|' readarray PORTS <<< "$matched"的东西。