Arrays Unix IFS无法设置键/值数据并将其放入数组

Arrays Unix IFS无法设置键/值数据并将其放入数组,arrays,bash,shell,unix,Arrays,Bash,Shell,Unix,我有一个小bash脚本,我以前使用过。其中,我使用UnixIFS从文本文件导入键/值: #!/bin/bash KEY=/home/myusr/.keyinfo IFS=" " set -A arr $(cat $KEY) echo "This is ${arr[0]}" echo "This is ${arr[1]}" 输入.keyinfo文件: ABC 123 但是,我正在尝试让它在不同风格的Linux上工作,我收到了以下错误消息: ./tst3.sh: line 7: set: -

我有一个小bash脚本,我以前使用过。其中,我使用Unix
IFS
从文本文件导入键/值:

#!/bin/bash

KEY=/home/myusr/.keyinfo

IFS="
"
set -A arr $(cat $KEY)
echo "This is ${arr[0]}"
echo "This is ${arr[1]}"
输入
.keyinfo
文件:

ABC 123
但是,我正在尝试让它在不同风格的Linux上工作,我收到了以下错误消息:

./tst3.sh: line 7: set: -A: invalid option
set: usage: set [--abefhkmnptuvxBCHP] [-o option-name] [arg ...]
This is
This is
问题:

  • 这是使用
    IFS
    的更好方法吗?最佳实践

我想将键/值对转储到一个数组中,然后在稍后的脚本中调用它们。

您可以通过如下方式修改代码:

#!/bin/bash
KEY=/home/myusr/.keyinfo
IFS=$' '  # omitting this line will do too, as IFS is defaulted to space
declare -a arr=($(cat $KEY))
echo "This is ${arr[0]}"
echo "This is ${arr[1]}"
使用
declare
来声明变量,而不是
set

-A
选项用于关联数组,
-A
用于索引数组


<> >而不是使用<代码> CAT<代码>,您应该考虑使用:<代码>声明-ARR=($(<$key))< /C> >/P>您的IFS包含什么内容?看不出里面有哪些空白。你是说我的输入文件吗?我想创建一个带有
key-value
key:value
key的密钥文件;值
以及分割这些值的最佳方法。不,我指的是定义IFS的引号之间的内容。无论如何,
set-A
是ksh:bash没有
set
-A
选项,如错误所示。难道
\n
不是换行符吗?我得到了这些结果:这是ABC 123这是我的键和值之间有一个标签。太棒了!感谢您的帮助和解释,以使用这个。