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

时间:2015-05-03 23:11:19

标签: arrays bash shell unix

我之前有过一些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的更好方法吗?最佳做法?

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

1 个答案:

答案 0 :(得分:2)

您可以通过以下方式修改代码来使用您的代码:

#!/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

,而不是使用declare -a arr=($(< $KEY))