Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在BASH中取消定义变量_Linux_Bash - Fatal编程技术网

Linux 在BASH中取消定义变量

Linux 在BASH中取消定义变量,linux,bash,Linux,Bash,为了节省时间,我在BASH中定义了一些变量(不是BASH文件,只是命令行BASH)。我多么粗心,竟然给变量起了一个错误的名字foo1,而不是foo。因此,我想取消定义foo1 我知道我可以将foo1设置为空并定义foo。这样做,foo1仍然存在,可能会混淆。我不能使用unset来取消定义foo1,因为它不是环境变量 问题:如何在BASH中取消定义变量?您只需使用命令取消设置: unset foo1 $ foo1=something $ foo="something else" $ set |

为了节省时间,我在BASH中定义了一些变量(不是BASH文件,只是命令行BASH)。我多么粗心,竟然给变量起了一个错误的名字
foo1
,而不是
foo
。因此,我想取消定义
foo1

我知道我可以将
foo1
设置为空并定义
foo
。这样做,
foo1
仍然存在,可能会混淆。我不能使用
unset
来取消定义
foo1
,因为它不是环境变量


问题:如何在BASH中取消定义变量?

您只需使用命令
取消设置

unset foo1
$ foo1=something
$ foo="something else"
$ set | grep ^foo
foo='something else'
foo1=something
$ unset foo1
$ set | grep ^foo
foo='something else'

如果
foo1
不是一个环境变量,这无关紧要。

作为@BroSlow注释,您将使用
取消设置

unset foo1
$ foo1=something
$ foo="something else"
$ set | grep ^foo
foo='something else'
foo1=something
$ unset foo1
$ set | grep ^foo
foo='something else'

您可以使用
set-u
来“尝试使用未定义的变量输出错误消息,并强制退出”

或者向shebang行添加
-u
,如下所示:

#!/usr/bin/bash -u

foo1
不是环境变量并不重要,您仍然可以使用
unset
将其取消设置。也不确定您所说的
foo1是什么意思仍然存在
?@BroSlow谢谢。我输入了错误的
取消设置$foo1
。我是个粗心的初学者。从技术上讲,没有环境变量这样的东西。所有变量都是shell变量,其中一些变量可能被标记为导出到子进程。“环境”变量只是在启动时根据在环境中找到的字符串创建的shell变量。我认为这个问题的措辞可能不清楚,但OP正在寻求一种方法来避免
bash
将未定义的变量评估为空特性。真的吗?尽管OP两次输入“如何取消变量定义”?就像我说的,措辞很糟糕。“我太粗心了,给变量取了一个错误的名字foo1而不是foo。所以,我想取消foo1的定义。”除非OP想避免调试时间的损失,否则这个问题会有什么用处呢?echo${foo1}不会停止执行,只是兴高采烈地前进?为什么会被否决?我想添加
帮助取消设置
信息,但这显然是一个很好的答案。我想这是因为你的评论,但它是在同一时间发布的,对不起。没问题。我想我们在同一时间打字。一直都是这样,绝对不是投票否决正确答案的理由。虽然看起来是那个人把它拿走了。