![读取ksh中的文件内容并用','分割](https://linux22.com/image/207555/%E8%AF%BB%E5%8F%96ksh%E4%B8%AD%E7%9A%84%E6%96%87%E4%BB%B6%E5%86%85%E5%AE%B9%E5%B9%B6%E7%94%A8'%2C'%E5%88%86%E5%89%B2.png)
我的 file.txt 包含以下内容:-
./raw_input/0009/img.raw,./raw_input/0009/calib.raw
答案1
如果你的ksh
是ksh93
或mksh
,您可以使用以下命令将第一行读入数组:
IFS=, read -rA array < file.txt
也适用于zsh
或yash
。由于某种原因,bash
多年后,选择使用-a
而不是-A
为此。
ksh93 还可以进行 CSV 解析-S
(处理跨多行的引号和值):
IFS=, read -rSA array < file.txt
例如,包含file.txt
:
"foo bar",,"blah""blah
blah"
这给出:
$ typeset -p array
typeset -a array=('foo bar' '' $'blah"blah\nblah')
拆分整个文件在逗号上,您可以使用 split+glob (在 unquoted 上隐式完成$(<file)
)并禁用 glob:
set -o noglob
IFS=,
array=( $(<file.txt) )
或者为了与 ksh88 / pdksh 兼容:
set -o noglob
IFS=,
set -A array -- $(<file.txt)
请注意$(<...)
,还会删除尾随的换行符。
另请注意,如果文件以 a 结尾,
(这也适用于read
上面的情况,甚至 with -S
,除了zsh
),不会创建额外的尾随空元素(,
被视为分隔符, 不是分隔器,尽管S
in$IFS
可能会建议)。