Bash 将echo和cut命令指定给变量

Bash 将echo和cut命令指定给变量,bash,cut,Bash,Cut,我试图从“upper/lower/boo.txt”中获取字符串“boo”,并将其分配给一个变量。我在努力 NAME= $(echo $WHOLE_THING | rev | cut -d "/" -f 1 | rev | cut -d "." -f 1) 但结果却是空的。我做错了什么?一点也不要那样做。更有效的方法是使用内置shell操作,而不是进程外工具,如cut和rev whole_thing=upper/lower/boo.txt name=${whole_thing##*/} name

我试图从“upper/lower/boo.txt”中获取字符串“boo”,并将其分配给一个变量。我在努力

NAME= $(echo $WHOLE_THING | rev | cut -d "/" -f 1 | rev | cut -d "." -f 1)

但结果却是空的。我做错了什么?

一点也不要那样做。更有效的方法是使用内置shell操作,而不是进程外工具,如
cut
rev

whole_thing=upper/lower/boo.txt
name=${whole_thing##*/}
name=${name%%.*}
有关bash中字符串操作的最佳实践的一般介绍,或有关此处使用的技术的更集中的参考,请参见


现在,关于您的原始代码不起作用的原因:

var=$(command_goes_here)
…是正确的语法。相比之下:

var= $(command_goes_here)
…在运行
command\u goes\u here
时导出名为
var
的空环境变量,然后在运行
command\u goes\u here
的输出时将其作为自己的命令导出


为了展示另一种变体

var = command_goes_here

…作为命令运行
var
,第一个参数为
=
,第二个参数为
command。也就是说,空格很重要。:)

根本不要那样做。更有效的方法是使用内置shell操作,而不是进程外工具,如
cut
rev

whole_thing=upper/lower/boo.txt
name=${whole_thing##*/}
name=${name%%.*}
有关bash中字符串操作的最佳实践的一般介绍,或有关此处使用的技术的更集中的参考,请参见


现在,关于您的原始代码不起作用的原因:

var=$(command_goes_here)
…是正确的语法。相比之下:

var= $(command_goes_here)
…在运行
command\u goes\u here
时导出名为
var
的空环境变量,然后在运行
command\u goes\u here
的输出时将其作为自己的命令导出


为了展示另一种变体

var = command_goes_here

…作为命令运行
var
,第一个参数为
=
,第二个参数为
command。也就是说,空格很重要。:)

语法是
var=$(命令)
。删除
=
后面的空格。此外,你可能会发现有趣的…提醒你,这也是一个非常愚蠢的操作方式。啊,我是个白痴,谢谢,还有什么更好的方法吗?(在另一点上,所有大写名称都是保留的;你应该使用至少一个小写字符的名称作为你自己的变量)。顺便说一句,也会发现你的原始问题(和其他一些问题). :)语法是
var=$(命令)
。删除
=
后面的空格。此外,你可能会发现有趣的…提醒你,这也是一个非常愚蠢的操作方式。啊,我是个白痴,谢谢,还有什么更好的方法吗?(在另一点上,所有大写名称都是保留的;你应该使用至少一个小写字符的名称作为你自己的变量)。顺便说一句,也会发现你的原始问题(和其他一些问题). :)这个很好的答案提示我一个问题:如果我说
var=3 echo“$var”
,它是否应该返回
3
?它不返回任何内容。@fedorqui,……因为以这种方式设置的变量仅在环境中,在展开时不可用。是的,这是预期的行为。@fedorqui,…相比之下,与
var=3sh-c'echo“$var”
。哦,就是这样!我做了很多测试,都找不到路。那么,让我们看看我是否理解您的解决方案:通过说
var=3
我们在环境中定义变量,它被我们用
sh-c
打开的子shell“复制”或“接收”。对。您也可以在
var=3 env
的输出中看到它。这个很好的答案提示我一个问题:如果我说
var=3 echo“$var”
,它是否应该返回
3
?它不返回任何内容。@fedorqui,……因为以这种方式设置的变量仅在环境中,在展开时不可用。是的,这是预期的行为。@fedorqui,…相比之下,与
var=3sh-c'echo“$var”
。哦,就是这样!我做了很多测试,都找不到路。那么,让我们看看我是否理解您的解决方案:通过说
var=3
我们在环境中定义变量,它被我们用
sh-c
打开的子shell“复制”或“接收”。对。您还可以在
var=3 env
的输出中看到它。