如何修改变量

如何修改变量

我有以下变量:

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

相关内容