unix shell替换字符串两次(在一行中)

时间:2013-09-27 13:42:47

标签: bash shell unix

我使用参数-A AA/BB运行脚本。要获得AA和BB阵列,我可以这样做。

INPUT_PARAM=(${AIRLINE_OPTION//-A / }) #get rid of the '-A ' in the begining
LIST=(${AIRLINES_PARAM//\// })         # split by '/'

我们能否在一条线上实现这一目标?

提前致谢。

3 个答案:

答案 0 :(得分:4)

单程

IFS=/ read -r -a LIST <<< "${AIRLINE_OPTION//-A /}"

这会将参数替换${AIRLINE_OPTION//-A /}的输出放入“here-string”,并使用内置的bash read将其解析为数组。通过为/命令设置IFS/的值,可以实现read拆分。

答案 1 :(得分:2)

例如,使用awk,您可以创建一个数组并将其存储在LIST变量中:

$ LIST=($(awk -F"[\/ ]" '{print $2,$3}' <<< "-A AA/BB"))

结果:

$ echo ${LIST[0]}
AA
$ echo ${LIST[1]}
BB

解释

  • -F"[\/ ]"定义了两个可能的字段分隔符:空格或斜杠/
  • '{print $2$3}'根据这些分隔符打印第2和第3个字段。

答案 2 :(得分:2)

LIST=( $(IFS=/; for x in ${AIRLINE_OPTION#-A }; do printf "$x "; done) )

这是一个可移植的解决方案,但如果您的read支持-a并且您不介意可移植性,那么您应该选择@ 1_CR的解决方案。