我是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)
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)