如何在bash的别名中包含环境变量?

Dob*_*boy 24 bash

我是bash的新手,我想为bash别名包含一个env ..我想做以下的事情

alias foo="bar $(baz)"
Run Code Online (Sandbox Code Playgroud)

所以我可以做类似以下的事情

> baz=40
> foo
Run Code Online (Sandbox Code Playgroud)

和foo将扩展到命令bar 40.目前上述方法不起作用,因为在制作别名时扩展了$(baz).我是否必须在功能或其他内容中包装它?

Ken*_*ste 46

您需要使用单引号(')来防止bash在创建别名时扩展变量:

$ alias foo='echo "$bar"'
$ bar="hello"
$ foo
hello
Run Code Online (Sandbox Code Playgroud)

  • 正确的答案,只要小心别名`test`,这是一个实际的命令. (4认同)
  • `alias foo ='echo"$ bar"'`.`export`是不必要的. (4认同)
  • 还有`alias test = echo \ $ bar`(相同的想法,扩展被抑制) (2认同)

orm*_*aaj 11

别名没有“环境”。在这个问题中,没有使用环境变量 - 仅使用 shell 变量。如果要使用环境,请使用函数。在这种情况下,别名相对于函数没有任何优势。

$ alias foo='echo "$bar"'
$ bar=hi foo
Run Code Online (Sandbox Code Playgroud)

这不会产生任何输出,因为赋值是在单词扩展之后评估的。

$ alias foo=$'eval \'echo "$bar"\''
$ bar=hi foo
hi
Run Code Online (Sandbox Code Playgroud)

编辑

function f {
    typeset -n ref=$1
    printf '%s\n' "$ref"
}

foo=moo command -- \
    eval -- \
    typeset +x foo \; f foo
Run Code Online (Sandbox Code Playgroud)