use*_*369 3 bash zsh array read
给这个file.txt:
first line
second line
third line
Run Code Online (Sandbox Code Playgroud)
这适用于bash:
while IFS=' ' read -a args; do
echo "${args[0]}"
done < file.txt
Run Code Online (Sandbox Code Playgroud)
生产
first
second
third
Run Code Online (Sandbox Code Playgroud)
也就是说,我们能够逐行读取文件,并且在每一行上我们使用空格作为分隔符将行进一步拆分为一个数组。但是在 中zsh,结果是一个错误:read: bad option: -a。
我们怎样才能做到与 inzsh一样bash呢?我已经尝试了几种解决方案,但我永远无法使用空格作为分隔符将字符串拆分为数组。
从man zshbuiltins,zsh 的 read 改为使用-A。
read [ -rszpqAclneE ] [ -t [ num ] ] [ -k [ num ] ] [ -d delim ]
[ -u n ] [ name[?prompt] ] [ name ... ]
...
-A The first name is taken as the name of an array
and all words are assigned to it.
Run Code Online (Sandbox Code Playgroud)
因此命令是
while IFS=' ' read -A args; do
echo "${args[1]}"
done < file.txt
Run Code Online (Sandbox Code Playgroud)
注意默认情况下,zsh 数组编号以 开头1,而 bash 以0.
$ man zshparam
...
Array Subscripts
...
The elements are numbered beginning with 1, unless the
KSH_ARRAYS option is set in which case they are numbered from zero.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6445 次 |
| 最近记录: |