请考虑以下代码段:
$ SOMEVAR=AAA
$ echo zzz $SOMEVAR zzz
zzz AAA zzz
Run Code Online (Sandbox Code Playgroud)
在这里,我设置$SOMEVAR到AAA第一线-当我赞同它的第二行,我得到的AAA内容符合市场预期.
但是,如果我尝试在同一命令行上指定变量echo:
$ SOMEVAR=BBB echo zzz $SOMEVAR zzz
zzz AAA zzz
Run Code Online (Sandbox Code Playgroud)
......我没有BBB按照我的预期得到 - 我得到旧值(AAA).
这是事情应该如何?如果是这样,那么为什么你可以指定变量LD_PRELOAD=/... program args ...并让它工作?我错过了什么?
假设myfile我当前的工作目录中有一个文件.如果命令正常执行,我想设置变量,但也使用其结果.
$ ls myfile && v=3
myfile
$ echo "$v"
3
Run Code Online (Sandbox Code Playgroud)
但是现在我也想管道结果,所以我使用{ list; }语法对命令进行分组:
$ unset v
$ { ls myfile && v=3; } | grep myf
myfile
$ echo "$v"
# v is not set
Run Code Online (Sandbox Code Playgroud){ list; }在大括号之间放置命令列表会导致列表在当前shell上下文中执行.没有创建子shell.以下列表中的分号(或换行符)是必需的.
所以,根据我的理解,v应该设置为3.但它没有发生.为什么?
我正试图从"upper/lower/boo.txt"获取字符串"boo"并将其分配给变量.我在努力
NAME= $(echo $WHOLE_THING | rev | cut -d "/" -f 1 | rev | cut -d "." -f 1)
Run Code Online (Sandbox Code Playgroud)
但它是空的.我究竟做错了什么?