这是我为执行此功能所做的工作,但我没有得到我想要的东西。
#!/bin/sh
DIRECTIONPART1=4-7-9
for (( i=1; i<=3; i++ ))
do
x=`echo $DIRECTIONPART1| awk -F'-' '{print $i}'`
myarray[$i]=$x
done
for (( c=1; c<=3; c++ ))
do
echo ${myarray[$c]}
done
我们在此步骤中意识到的问题
x=`echo $DIRECTIONPART1| awk -F'-' '{print $i}'`
请帮助我获得结果
这就是我得到的:
4-7-9
4-7-9
4-7-9
但我想要这个: 4 7 9
答案 0 :(得分:0)
你是对的问题。问题是您无法在$i
中使用print
作为变量。我尝试了一些对我有用的解决方法:
x=`echo $DIRECTIONPART1| awk -F '-' -v var=$i '{print $var }'`
总之看起来像:
#!/bin/sh
DIRECTIONPART1=4-7-9
for (( i=1; i<=3; i++ ))
do
x=`echo $DIRECTIONPART1| awk -F '-' -v var=$i '{print $var }'`
myarray[$i]=$x
done
for (( c=1; c<=3; c++ ))
do
echo ${myarray[$c]}
done
预期输出:
# sh test.sh
4
7
9
#
答案 1 :(得分:0)
获得所需输出的最简单的可移植方法是使用$IFS
(在子shell中):
#!/bin/sh
DIRECTIONPART1=4-7-9
(IFS=- && echo $DIRECTIONPART1)
shell数组不能移植,因为POSIX,ksh和bash不能 同意阵列。 POSIX没有; ksh和bash使用不同的语法。
如果你真的想要一个数组,我建议你在awk中完成整个事情:
#!/bin/sh
DIRECTIONPART1=4-7-9
awk -v v=${DIRECTIONPART1} 'BEGIN {
n=split(v,a,"-")
for (i=1;i<=n;i++) {
print a[i]
}
}'
这将为字符串中的每个值生成一行:
4
7
9
如果您想要bash数组,请删除#!/bin/sh
,并执行以下操作:
#!/bin/bash
DIRECTIONPART1=4-7-9
A=( $(IFS=- && echo $DIRECTIONPART1) )
for ((i=0;i<=${#A[@]};i++))
do
echo ${A[i]}
done
答案 2 :(得分:0)
多次,甚至一次调用awk
不是正确的做法。使用bash
内置read
填充数组。
# Note that the quotes here are only necessary to
# work around a bug that was fixed in bash 4.3. It
# doesn't hurt to use them in any version, though.
$ IFS=- read -a myarray <<< "$DIRECTIONPART_1"
$ printf '%s\n' "${myarray[@]}"
4
7
9
答案 3 :(得分:0)
[akshay@localhost tmp]$ bash test.sh
#!/usr/bin/env bash
DIRECTIONPART1=4-7-9
# Create array
IFS='-' read -a array <<< "$DIRECTIONPART1"
#To access an individual element:
echo "${array[0]}"
#To iterate over the elements:
for element in "${array[@]}"
do
echo "$element"
done
#To get both the index and the value:
for index in "${!array[@]}"
do
echo "$index ${array[index]}"
done
<强>输出强>
[akshay@localhost tmp]$ bash test.sh
4
4
7
9
0 4
1 7
2 9
或强>
[akshay@localhost tmp]$ cat test1.sh
#!/usr/bin/env bash
DIRECTIONPART1=4-7-9
array=(${DIRECTIONPART1//-/ })
for index in "${!array[@]}"
do
echo "$index ${array[index]}"
done
<强>输出强>
[akshay@localhost tmp]$ bash test1.sh
0 4
1 7
2 9