【问题标题】:How to use set to change a shell variable?如何使用 set 更改 shell 变量?
【发布时间】:2017-04-21 05:08:35
【问题描述】:

我正在使用 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?

【问题讨论】:

  • 尝试添加export SHELL

标签: linux bash shell


【解决方案1】:

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 来设置变量。

【讨论】:

    【解决方案2】:

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

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

    MY_VARIABLE=some_value
    

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

    【讨论】:

      【解决方案3】:
      chsh -s {shell-name} {user-name}
      

      如果您想将默认 shell 更改为破折号,请使用此选项

      【讨论】:

      • set到底能做什么?
      • 它设置或取消设置外壳选项的值和外壳的位置参数。它不会改变外壳本身。您可以查看链接以获取详细说明。 link
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-17
      • 1970-01-01
      • 2021-01-26
      • 1970-01-01
      • 2021-07-09
      • 2021-06-01
      • 2018-07-11
      相关资源
      最近更新 更多