Bash 将echo和cut命令指定给变量
我试图从“upper/lower/boo.txt”中获取字符串“boo”,并将其分配给一个变量。我在努力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
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
的输出中看到它。