管道中的命令行bash变量

管道中的命令行bash变量,bash,command-line,pipe,Bash,Command Line,Pipe,有没有办法在bash函数中使用STDIN e、 g 没关系,我有我的号码,接下来我想去掉括号。 我所做的是: string=`grep -Eo "\([[:digit:]]+\)$" test.txt`; echo ${string:1:-1} 100 所以我的问题解决了,但我花了很长时间做的是: grep -Eo "\([[:digit:]]+\)$" test.txt | echo ${$1:1:-1} grep -Eo "\([[:digit:]]+\)$" test.txt | ${$

有没有办法在bash函数中使用STDIN

e、 g

没关系,我有我的号码,接下来我想去掉括号。 我所做的是:

string=`grep -Eo "\([[:digit:]]+\)$" test.txt`; echo ${string:1:-1}
100
所以我的问题解决了,但我花了很长时间做的是:

grep -Eo "\([[:digit:]]+\)$" test.txt | echo ${$1:1:-1}
grep -Eo "\([[:digit:]]+\)$" test.txt | ${$1:1:-1}
grep -Eo "\([[:digit:]]+\)$" test.txt | xargs echo ${:1:-1}
grep -Eo "\([[:digit:]]+\)$" test.txt | xargs -I 's' echo ${s:1:-1}
等等,等等。。。这些都不管用


因此,假设这是可能的,我如何在bash命令中使用管道输入值

您使用的语法用于变量。将grep的输出保存在变量中是使用它的自然方式

如果要使用管道,则需要使用修改stdin的内容,而不是变量。考虑<代码> SED < /P>
grep -Eo "\([[:digit:]]+\)$" test.txt | sed 's/^(\|)$//g'

假设您希望使用来自管道的一些输入,并且每行输入都要单独处理,您可以尝试:

echo "somevar = (100)" | grep -Eo "\([[:digit:]]+\)$" | while read in
do
  echo $in
done

while
循环将使用
read
命令一次读取
中变量
中的一行。在这个循环中,你可以做任何你需要的治疗。在本例中,我使用了一个
echo
来表示您得到了输入值。

不清楚您编写的语法的意图/含义……也就是说,对于shell本机使用的输入流读取的一般性讨论,关于一个常见警告的讨论,请参见——我想知道是否可以使用管道而不是将其存储在变量中实现与工作示例相同的效果。虽然您的BashFAQ链接似乎回答了我的问题,但这个特定的公式很容易受到攻击。(顺便说一句,所有caps变量名都用于对OS或shell有意义的变量,而至少有一个小写字符的名称则保留给应用程序使用——请参见第四段;因此,如果您不想弄乱反斜杠或前导/尾随wh,最好是在读取行时使用
,或者在IFS=read-r行时使用
@Charles Duffy声明,
中的
变量在循环外是不可用的,但如果在循环内使用它就很好了。我还按照建议将其改为小写。比我希望的要详细一点(我暗自认为bash中可能存在perl esq$u)但这正是我想要的,也要感谢查尔斯·达菲,你很清楚你的盛宴!
echo "somevar = (100)" | grep -Eo "\([[:digit:]]+\)$" | while read in
do
  echo $in
done