如何使用set来更改shell变量?

时间:2017-04-21 05:08:36

标签: linux bash shell

我正在使用GNU bash,版本4.3.11(1)-release(x86_64-pc-linux-gnu)。

$set | grep SHELL
SHELL=/bin/bash
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor:verbose

现在我想将SHELL变量的值更改为/ bin / dash。所以我试过

$set SHELL=/bin/dash
set SHELL=/bin/dash
$set | grep SHELL
SHELL=/bin/bash
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor:verbose
_=SHELL=/bin/dash

我还尝试了其他几种语法。但是SHELL变量值并没有改变。我有两个问题: 1.如何使用set来更改SHELL变量 2.什么是_ = SHELL = / bin / dash?

3 个答案:

答案 0 :(得分:2)

set内置命令有多种用途,例如开启跟踪(set -x)或关闭(set +x)。但它也设置了位置参数 - $1"$@"等等。这就是您所做的:

set SHELL=/bin/dash
echo "$1"

您将SHELL=/bin/dash作为echo的输出。

要设置变量,请设置变量 - 不带任何关键字:

SHELL=/bin/dash

$_是上一个命令的最后一个参数的值。例如:

$ cp oldfile.c newfile.c
$ vim $_
…now editing newfile.c
$

这可能很有用,但您也可以解决问题,因为$_会在您没有预料到的情况下发生变化。

请注意,如果您被误导为使用C shell或C shell派生,那么您可以使用set variable=value来设置变量。

答案 1 :(得分:0)

chsh -s {shell-name} {user-name}

如果要将默认shell更改为破折号

,请使用此选项

答案 2 :(得分:0)

在Windows CMD shell或Unix csh shell中,set命令设置变量。

但是,在bashdash等Bourne样式的shell中,您可以在没有任何特定命令的情况下设置变量。设置环境变量可以简单如下:

MY_VARIABLE=some_value

set命令确实意味着完全不同的东西。它主要用于shell脚本,而不是交互式shell。您可以在shell脚本中使用它来设置"位置参数" (如第一个参数,第二个参数等)。您还可以使用它来设置shell选项,如跟踪模式(-x)或错误导致错误(-E)。