我有以下变量:
col=1,3,4,
是否有办法选择变量中的数字:(即 1 3 4 并使用它们?
例如从文件中选择“1”、“3”或“4”列.txt
?
答案1
你可以使用一些read
魔法:
i=1,2,3,; echo $i | { IFS=","; read a b c; echo "$a|$b|$c"; }
i=1,2,3,; read a b c <<<$(IFS=","; echo $i); echo "$a|$b|$c"
i=1,2,3,; echo $i | { while read -d\, j; do echo $j; done; }
答案2
是否有办法选择变量的数字: 1 3 4 并使用它们?
$ col=1,3,4,; IFS=","; for i in $col; do echo "i= $i"; done
i= 1
i= 3
i= 4
但更改内部字段分隔符 ( IFS
) 可能很危险,因为它是系统范围的变量,并且许多应用程序都依赖其默认值。所以建议您每次需要修改时都保存并恢复其原始值。
$ col=1,3,4,
$ OLDIFS=$IFS
$ IFS=","; for i in $col; do echo "i= $i"; done
i= 1
i= 3
i= 4
$ IFS=$OLDIFS
答案3
您可以将列表设置为数组变量。
#!/bin/bash
col=1,3,4
declare -a colArray=($(echo $col | tr ',' ' '))
echo ${#colArray[@]} # number of elements in the array
echo ${colArray[0]} # first element of the array
for i in $(seq 0 $((${#colArray[@]}-1))) # loop through the array
do
echo ${colArray[$i]}
done
循环可以通过多种不同的方式完成,我只选择了一种。比乱搞 IFS 安全得多。
答案4
更改内部字段分隔符 (IFS) 可能很危险,因为它是系统范围的变量,并且许多应用程序都依赖其默认值。所以建议您每次需要修改时都保存并恢复其原始值。
使用先前建议的示例:
#!/bin/bash
col=1,3,4,
OLD_IFS=$IFS
IFS=","
for i in $col; do
echo "i= $i"
done
IFS=$OLD_IFS