我想将第一个命令的输出保存为管道前面的变量,并将它们发送到管道。
例如:find -type d | grep -E '^\./y'
。在我的变量中将输出find -type d
。
感谢您的帮助
EDIT 也许我可以用另一种方式解决这个问题,但我站在另一个问题面前。如何用管道中的参数调用我自己的函数?
EX:find -type d | MyFunction
答案 0 :(得分:0)
您可以使用$()(以前是`)语法轻松捕获变量中任何命令的输出,如下所示:
VARIABLE = $(命令)
然后你可以将“echo $ VARIABLE”的输出传输到下一个命令中。
但是,请记住,shell变量值的长度受到限制,并且不能保证足够大以容纳任意值 - 通常,尝试尝试的不是一个好主意。
答案 1 :(得分:0)
根据安德鲁对佩里的评论,或许
find . -type d -print0 | while IFS= read -r -d "" dir; do
# do something with $dir
case "$dir" in
./y*) echo "$dir" ;;
*) : ;;
esac
done
答案 2 :(得分:0)
RE
EDIT Maybe I can solve this problem another way, but I am standing in front of another problem. How to call my own function with parameter from pipeline?
EX: find -type d | MyFunction
以下所有工作:
$ cat ./blah.sh
#!/bin/bash
function blah {
while read i; do
echo $i
done
}
find ~/opt -type d | blah
blah <<< $(find ~/opt -type d)
blah < <(find ~/opt -type d)
$ ./blah.sh
/home/me/opt
/home/me/opt/bin
/home/me/opt /home/me/opt/bin
/home/me/opt
/home/me/opt/bin
所以我想象如果find -type d | MyFunction
不起作用,那么该函数可能不会在stdin上寻找输入。
答案 3 :(得分:0)
您可以使用bash在数组中提供这样的变量,而不需要任何循环:
$ read -a array <<< $(find 2>/dev/null -type d | grep -E 'test_[0-9]+')
$ echo ${array[@]}
./test_003.t ./test_002.t ./test_001.t
$ echo ${array[1]}
./test_002.t