首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无限循环中从bash脚本到bash脚本

无限循环中从bash脚本到bash脚本
EN

Stack Overflow用户
提问于 2015-01-26 14:25:18
回答 1查看 291关注 0票数 3

我的脚本“只运行一次”版本的一个非常简单的示例:

代码语言:javascript
复制
./myscript.sh var1 "var2 with spaces" var3
#!/bin/bash
echo $1 #output: var1
echo $2 #output: var2 with spaces
echo $3 #output: var3

按计划工作!现在,我尝试启动脚本并在循环中输入vars,因为稍后我希望将多个数据集一次复制到shell中。

代码语言:javascript
复制
./myscript.sh
#!/bin/bash  
while true; do
  read var1 var2 var3
  #input: var1 "var2 with spaces" var3
  echo $var1 #output: var1
  echo $var2 #output: "var2
  echo $var3 #output: with spaces" var3
done

它似乎在空格处拆分了输入,把所有剩下的都放在最后一个变量中,对吗?在循环中添加vars是否有更好的可能性?或者我如何被读到就像我在脚本后面添加了vars一样?

在将不同的vars复制到shell时,在循环中执行一个脚本的这种循环的英文单词是什么?如果我不知道它叫什么.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-26 14:44:01

它读取STDIN并将这些行解析为带有shell引用的参数:

代码语言:javascript
复制
# Clean input of potentially dangerous characters. If your valid input
# is restrictive, this could instead strip everything that is invalid
# s/[^a-z0-9" ]//gi
sed -ue 's/[][(){}`;$]//g' | \
while read input; do
  if [ "x$input" = "x" ]; then exit; fi      
  eval "set -- $input"
  # check argument count
  if [ $(( $# % 3 )) -ne 0 ]; then 
     echo "Please enter 3 values at a time"
     continue;
  fi

  echo $1
  echo $2
  echo $3
done

所有的魔法都是set -- $input做的。有关设置,请参见Bash手册页面。

代码语言:javascript
复制
--
    If no arguments follow this option, then the positional parameters are   
    unset. Otherwise, the positional parameters are set to the arguments, 
    even if some of them begin with a ‘-’.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28151987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档