Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在循环时将输入管道化到Bash并在循环结束后保留变量_Bash_While Loop_Stdin_Pipe - Fatal编程技术网

如何在循环时将输入管道化到Bash并在循环结束后保留变量

如何在循环时将输入管道化到Bash并在循环结束后保留变量,bash,while-loop,stdin,pipe,Bash,While Loop,Stdin,Pipe,Bash允许使用:cat的正确符号是: 大括号是一个I/O分组操作,它们本身并不创建子shell。在此上下文中,它们是管道的一部分,因此作为子shell运行,但这是因为|,而不是{…}。你在问题中提到了这一点。好的,您可以在函数中从这些函数中进行返回 Bash还提供内置功能,其众多选项之一是: lastpipe 如果已设置,并且作业控制未处于活动状态,则shell将运行当前shell环境中未在后台执行的管道的最后一个命令 因此,在脚本中使用类似的内容可以在循环后使用modifiedsum: F

Bash允许使用:
cat的正确符号是:

大括号是一个I/O分组操作,它们本身并不创建子shell。在此上下文中,它们是管道的一部分,因此作为子shell运行,但这是因为
|
,而不是
{…}
。你在问题中提到了这一点。好的,您可以在函数中从这些函数中进行返回


Bash还提供内置功能,其众多选项之一是:

lastpipe

如果已设置,并且作业控制未处于活动状态,则shell将运行当前shell环境中未在后台执行的管道的最后一个命令

因此,在脚本中使用类似的内容可以在循环后使用modified
sum

FILECONTENT="12 Name
13 Number
14 Information"
shopt -s lastpipe   # Comment this out to see the alternative behaviour
sum=0
echo "$FILECONTENT" |
while read number name; do ((sum+=$number)); done
echo $sum
在命令行中执行此操作通常与“作业控制未激活”(即,在命令行中,作业控制处于激活状态)相冲突。在不使用脚本的情况下对此进行测试失败

此外,如his中所述,您有时可以使用:

阅读时
;不要重复$i;完成如何使用,但另一种可能是使用:


阅读时
;做回显“$i”;done此函数使jpg文件(bash)重复$NUM次


相关:。解释所有选项,包括下面提到的流程替换和
lastpipe
及其优缺点。相关:。请原谅我的无知。我知道这是正确的解决方案,我已将其标记为答案,因此它对我有效。但是现在当我一边读一边运行
;不要重复$i;done<@WakanTanka:我必须进行一点实验……我相信答案是失败的读取将
I
重置为空,因此循环后的回显将回显一个空行。流程替换参考值得称赞。我不知道。@Wakan Tanka:得到了和你一样的结果,我在阅读时使用
;dox=$i;你是个救生员!几个小时以来一直在寻找类似的解决方案。你的是唯一有效的。
echo $FILECONTENT | 
{
while read i; do echo $i; done
...do other things using $i here...
}
FILECONTENT="12 Name
13 Number
14 Information"
shopt -s lastpipe   # Comment this out to see the alternative behaviour
sum=0
echo "$FILECONTENT" |
while read number name; do ((sum+=$number)); done
echo $sum
while read i; do echo $i; done <<< "$FILECONTENT"
while read i; do echo "$i"; done <<<"$FILECONTENT"
function makeDups() {
NUM=$1
echo "Making $1 duplicates for $(ls -1 *.jpg|wc -l) files"
ls -1 *.jpg|sort|while read f
do
  COUNT=0
  while [ "$COUNT" -le "$NUM" ]
  do
    cp $f ${f//sm/${COUNT}sm}
    ((COUNT++))
  done
done
}