我有一个简单的bash脚本,它会调用另一个脚本10次:
#!/bin/sh
val=10
for i in `seq $val`
do
./script2.sh flename$i
done
script2.sh
取2个输入参数(不是cmd参数,两个输入变量)(对我而言,无论哪个参数都可以,它们只能是2个相同的字符串)。现在=如何在script2.sh
循环中将这2个相同的字符串传递给for
?
我试过了:
./script2.sh flename$i | string1 | string1
但它并不像我想要的那样有用。
答案 0 :(得分:1)
该语法类似于
printf '%s\n' "$string1" "$string2" | ./script2.sh filename"$i"
你也可以使用这里的文件:
./script2.sh filename"$i" <<____HERE
$string1
$string2
____HERE
有些人会告诉你echo
,但它有各种可移植性问题等; printf
统一标准且更安全。但如果它只是两个静态的字符串行,你当然可以做到
echo 'string1
string2' | ./script2.sh filename "$i"
(是的,这是一个单引号的字符串,中间有换行符)或效率稍低
( echo string1; echo string2 ) | ./script2.sh filename"$i"
管道的一般语法是command1 | command2 | command...
,所以除非string1
是产生所需输出的命令,否则你所拥有的语法将无效。 (这不是不可能做到的,但在这个特定情况下可能不是一个好主意。)但最重要的是,你将脚本的输出汇总到string1
,你明显要反过来。
任何产生合适输出的命令都可用于输入管道;如果您需要大量输入,请尝试yes
,它专门用于此目的;
yes string1 | head -n 2 | ./script2.sh filename"$i"
在这里,yes
打印出无穷无尽的string1
行序列(好吧,当管道被head
关闭时,它会结束); head
只通过前两个。
答案 1 :(得分:0)
你只需要使用
./script2.sh flename$i "string1" "string2"
然后在script2中,文件名$ i将作为$ 1,string1作为$ 2,string2作为$ 3