从 bash 脚本到 bash 无限循环中的脚本
From bash script to bash script in infinite loop
我的脚本 "just run once" 版本的一个非常简单的示例:
./myscript.sh var1 "var2 with spaces" var3
#!/bin/bash
echo #output: var1
echo #output: var2 with spaces
echo #output: var3
按预期工作!
现在我尝试只启动脚本并循环输入变量,因为稍后我想一次将多个数据集复制到 shell.
./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
似乎 read 在空格处拆分输入,将所有剩余的内容放在最后一个 var 中,对吗?有没有更好的可能性在循环中添加变量?或者我如何才能像我在脚本后面添加变量那样阅读?
那种在循环中执行一个脚本同时将不同的变量复制到shell的循环的英文单词是什么?如果我不知道它叫什么,就不能 google 样品...
这会读取 STDIN 并将这些行解析为带有 shell 引号的参数:
# 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
echo
echo
done
set -- $input
施展所有魔法。请参阅 set 的 Bash 手册页。
--
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 ‘-’.
我的脚本 "just run once" 版本的一个非常简单的示例:
./myscript.sh var1 "var2 with spaces" var3
#!/bin/bash
echo #output: var1
echo #output: var2 with spaces
echo #output: var3
按预期工作! 现在我尝试只启动脚本并循环输入变量,因为稍后我想一次将多个数据集复制到 shell.
./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
似乎 read 在空格处拆分输入,将所有剩余的内容放在最后一个 var 中,对吗?有没有更好的可能性在循环中添加变量?或者我如何才能像我在脚本后面添加变量那样阅读?
那种在循环中执行一个脚本同时将不同的变量复制到shell的循环的英文单词是什么?如果我不知道它叫什么,就不能 google 样品...
这会读取 STDIN 并将这些行解析为带有 shell 引号的参数:
# 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
echo
echo
done
set -- $input
施展所有魔法。请参阅 set 的 Bash 手册页。
--
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 ‘-’.