关于bash中for循环问题


x='1,2,3,4'
IFS=$','
for entry in x
do
  echo $x
  unset $x
  echo $x
  
done
echo $x


输出结果是
1

2

3

4

但for循环里面不是已经把x删除了吗那为什么还能打出1,2,3,4呢?如果x是局部变量那最后打出来的x还是空的。为什么呢?谢谢!

首先unset 变量,而不是unset $变量。
其次你在unset前echo了一次,所以是会打印出来的。之后的两次就没有了。参考下面的代码

#!/bin/bash

x='1,2,3,4'
IFS=$','
for entry in x
do
  echo 'a'$x
  unset x
  echo 'b'$x
done
echo 'c'$x

楼主理解下$的作用,$它是取变量的值,而楼主unset $x 则是分别取消了1,2,3,4这些数,而非变量x,在不同的bash解释器中,对于unset $x ,有些shell是会直接报错的,而有些不会,这是bash解释器的区别问题,若楼主想取消x的值,则直接unset x 就行了,而非unset $x,如下:

x='1,2,3,4'
IFS=$','
for entry in x
do
echo $x
unset x # unset $x -> unset x
echo $x
done
echo $x