linux - 如何在 Fish shell 中设置变量?

标签 linux ubuntu-16.04 fish

Ubuntu(基本操作系统和 Linux Mint)中的 Fish shell 中的 set 命令不起作用。变量保持为空,甚至教程中的示例也不起作用,即:

(set foo hi --> # Sets the value of the variable $foo to be 'hi'.).

在脚本中我尝试执行以下操作,

set COUNTRY US CN MX

但是当我想通过 $COUNTRY 调用变量时却没有答案。

我做错了什么?

最佳答案

您真的在使用 fish shell 吗?因为你的例子对我有用:

$ set COUNTRY US CN MX
$ echo $COUNTRY
US CN MX
$ set --show COUNTRY
$COUNTRY: not set in local scope
$COUNTRY: set in global scope, unexported, with 3 elements
$COUNTRY[1]: length=2 value=|US|
$COUNTRY[2]: length=2 value=|CN|
$COUNTRY[3]: length=2 value=|MX|
$COUNTRY: not set in universal scope

我怀疑您正在尝试在另一个进程中使用COUNTRY。在这种情况下,您需要使用 set -x COUNTRY US CN MX 导出变量。但请注意,fish 变量是数组,导出具有多个值的 var 不会被子进程理解(除非该子进程是一个 Fish shell)。

此外,听起来您可能正在尝试通过 Fish 脚本修改父进程中的变量。那是行不通的。您不能修改父进程的变量。即使它们是环境变量也不行。这不是 fish 的限制。它是 UNIX 进程模型设计中固有的。

关于linux - 如何在 Fish shell 中设置变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53292693/

相关文章:

linux - 如何在 UNIX 中将 AWK 的多行输出插入到数组中

ruby-on-rails - 使用 Rails 测试 PayPal

python - Django 和 psycopg2 : FATAL: password authentication failed for user

node.js - 安装 ts-java 等 Node 包并不断出现 node-gyp 问题

linux - 仅主机网络不适用于 VMware Workstation

java - 我可以在哪个文件中更改 java 堆大小?

fish - fish shell 中意外缺乏变量扩展

shell - 如何从源文件终止执行 fish 脚本?

linux - 在fish shell中定义别名

linux - 在 Linux 中物理连续与几乎不连续