我正在尝试从“upper / lower / boo.txt”获取字符串“boo”并将其分配给变量。我在尝试
NAME= $(echo $WHOLE_THING | rev | cut -d "/" -f 1 | rev | cut -d "." -f 1)
但它是空的。我做错了什么?
答案 0 :(得分:7)
根本不这样做。更高效的是使用内置shell操作而不是cut
和rev
等进程外工具。
whole_thing=upper/lower/boo.txt
name=${whole_thing##*/}
name=${name%%.*}
有关bash中字符串操作的最佳做法的一般性介绍,请参阅BashFAQ #100,或the bash-hackers page on parameter expansion以获得有关此处所用技术的更集中的参考。
现在,就原始代码无效的原因而言:
var=$(command_goes_here)
...是正确的语法。相比之下:
var= $(command_goes_here)
...在运行var
时导出名为command_goes_here
的空环境变量,然后在运行command_goes_here
的输出作为自己的命令时。< / p>
要显示另一个变体,
var = command_goes_here
...运行var
作为命令,=
作为其第一个参数,command_goes_here
作为后续参数。也就是说,空白很重要。 :)