如何在 shell 中设置一个命令终身变量?

如何在 shell 中设置一个命令终身变量?

考虑以下示例:

file="test" echo $file

我的想法是file仅在命令期间持续存在echo $file。尽管$file此命令后不会持续存在,但echo不会打印任何内容,就好像$file未设置一样。

是否可以在 shell 中设置一条命令终身有效的变量?

编辑:我不想使用 shell 脚本或函数,如建议的那样全部 这些 有关的 问题

答案1

在执行命令行之前,命令行中的变量绑定不会发生。但是 的参数替换是$file在命令展开时发生的,这必须在执行之前发生。

解决这个问题的方法是将命令放入函数中:

fun()
{
   echo "file = " $file
}

file=abc fun

答案2

命令

file="test" echo $file

不输出test,因为扩展发生在运行命令之前。看一下这个:

$ set -x
$ foo='hello' echo $foo
+ foo=hello
+ echo

当您运行 Unix shell 脚本而不是运行 shell 命令时,不会发生同样的情况,例如,

foo='hello' /path/to/script.sh

在这种情况下,foo='hello'首先解析分配,然后/path/to/script.sh运行。

一些以前的有关的 帖子持久变量赋值 + CLI 命令的建议解决方案:

  1. foo='hello' bash -c 'echo $foo': 使用shell脚本是不可取的!简单命令的冗长方法。
  2. (){ local var=value; echo "1: $var"; }; echo "2: $var": 使用函数是不可取的!简单命令的冗长方法。
  3. TEST=foo && echo $TEST: 简单但坚持。

我的出路是

(file="test"; echo $file)

通过创建子shell,您可以创建一个shell变量,在echo命令中使用它,然后它就不会保留在该命令之外。

相关内容