我是 linux shell 和脚本的初学者,在执行此操作时我得到了一些奇怪的结果
#!/bin/bash
sysarch=( "x86" "amd64" )
arch_options=""
for i in "${sysarch[@]}"
do
:
if [ $i=="amd64" ]; then
arch_options="-m64 -D ACIS64"
elif [ $i=="x86" ]; then
arch_options="-m32"
fi
echo $arch_options
done
exec $SHELL
因此,我有一个包含两种架构类型的数组。我遍历它们,我想为每个选项获取相应的 GCC 选项。问题是 $arch_options
始终是 "-m64 -D ACIS64"
,与 $i
无关,我不明白为什么。
最佳答案
就像你说的,它每次都打印相同的值:
$ ./foo
-m64 -D ACIS64
-m64 -D ACIS64
让我们看一下:
$ shellcheck foo
In foo line 9:
if [ $i=="amd64" ]; then
^-- SC2077: You need spaces around the comparison operator.
In foo line 11:
elif [ $i=="x86" ]; then
^-- SC2077: You need spaces around the comparison operator.
In foo line 17:
exec $SHELL
^-- SC2086: Double quote to prevent globbing and word splitting.
并解决问题:
#!/bin/bash
sysarch=( "x86" "amd64" )
arch_options=""
for i in "${sysarch[@]}"
do
:
if [ $i == "amd64" ]; then
arch_options="-m64 -D ACIS64"
elif [ $i == "x86" ]; then
arch_options="-m32"
fi
echo $arch_options
done
exec "$SHELL"
瞧:
$ ./foo
-m32
-m64 -D ACIS64
关于linux - Bash 混合 for 循环和 if then 表达式给出不好的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22425805/