我通常command1 | command2 | command3
在 Linux 中使用很多,但大多数都在处理确定的内容。
当我用一个无限流尝试这个,cat | sed '' | sed ''
它希望模拟一个无限流时,它没有工作,直到我用Ctrl-D. 我可以通过使用解决问题,cat | sed -e '' -e ''
但我想知道为什么第一个不起作用。cat | cat | cat
工作得很好。这与 有什么关系sed
,如果有,那是什么问题?
我试着思考这个问题,我发现唯一不同的是,当我使用时,cat
我按下了Enter键,它做了一些sed ''
上面第一个没有发生的特殊事情?
谁能告诉我如何使管道与无限蒸汽无缝工作?
我试图创建一个循环输入并执行命令的函数 - 无论它们如何分隔。
function loop {
# Args
# 1: Command
# 2: Inputs
for input in "$2" ; do
$1 $input
done
}
Run Code Online (Sandbox Code Playgroud)
declare -a arr=("1" "2" "3")
$ loop echo "$arr[@]"
1
$ loop echo 1 2 3
1
$ loop echo $arr
1
Run Code Online (Sandbox Code Playgroud)
然而,根据这个答案,for .. in ..
适用于数组:
for item in "${arr[@]}" ; do
echo "$item"
done
Run Code Online (Sandbox Code Playgroud)
它也适用于空格分隔的值:
for item in 1 2 3 ; do
echo "$item"
done
Run Code Online (Sandbox Code Playgroud)
简而言之,我如何在传递参数时获得"${arr[@]}"
和的效果。1 2 …
我正在使用这种方法在后台运行一个进程。
"$@" &>/dev/null &disown
Run Code Online (Sandbox Code Playgroud)
我如何实现以下目标 -
pid
我如何将 an 传递array
给一个函数,特别是如果它在某个地方的中间?双方"${b}"
并"${b[@]}"
似乎只传递的第一个项目,所以有没有办法既-呼叫并检索它,正确?
#/usr/bin/env bash
touch a b1 b2 b3 c
f()
{
local a="${1}"
local b="${2}"
local c="${3}"
ls "${b[@]}" # expected b1 b2 b3
}
a=a
b=("b1" "b2" "b3")
c=c
f "${a}" "${b}" "${c}"
f "${a}" "${b[@]}" "${c}"
rm a b1 b2 b3 c
Run Code Online (Sandbox Code Playgroud)