将echo和cut命令分配给变量

jyu*_*429 1 bash cut

我正试图从"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)

但它是空的.我究竟做错了什么?

Cha*_*ffy 7

不要那样做.更高效的是使用内置shell操作而不是诸如cut和之类的进程外工具rev.

whole_thing=upper/lower/boo.txt
name=${whole_thing##*/}
name=${name%%.*}
Run Code Online (Sandbox Code Playgroud)

有关bash中字符串操作的最佳实践的一般性介绍,请参阅BashFAQ#100 ; 有关参数扩展的bash-hackers页面,请参阅此处使用的技术的更集中的参考.


现在,就原始代码不起作用的原因而言:

var=$(command_goes_here)
Run Code Online (Sandbox Code Playgroud)

...是正确的语法.相比之下:

var= $(command_goes_here)
Run Code Online (Sandbox Code Playgroud)

...导出一个var在运行时命名的空环境变量command_goes_here,然后在运行输出command_goes_here作为自己的命令.


为了显示另一个变体,

var = command_goes_here
Run Code Online (Sandbox Code Playgroud)

... var作为命令运行,=作为第一个参数,command_goes_here作为后续参数.也就是说,空白很重要.:)