我哪里错了?
我有一些文件如下:
filename_tau.txt
filename_xhpl.txt
fiename_fft.txt
filename_PMB_MPI.txt
filename_mpi_tile_io.txt
我将tau
,xhpl
,fft
,mpi_tile_io
和PMB_MPI
作为位置参数传递给脚本,如下所示:
./script.sh tau xhpl mpi_tile_io fft PMB_MPI
我希望grep在循环内搜索,首先搜索tau,xhpl等等。
point=$1 #initially points to first parameter
i="0"
while [$i -le 4]
do
grep "$str" ${filename}${point}.txt
i=$[$i+1]
point=$i #increment count to point to next positional parameter
done
答案 0 :(得分:6)
像这样设置你的for循环。使用这种语法,循环遍历位置参数,依次将每个参数分配给“点”。
for point; do
grep "$str" ${filename}${point}.txt
done
答案 1 :(得分:4)
有多种方法可以做到这一点,虽然我会使用shift
,但这是另一种方法。它使用Bash的间接功能:
#!/bin/bash
for ((i=1; i<=$#; i++))
do
grep "$str" ${filename}${!i}.txt
done
此方法的一个优点是您可以在任何地方启动和停止循环。假设您已经验证了范围,您可以执行以下操作:
for ((i=2; i<=$# - 1; i++))
另外,如果你想要最后一个参数:${!#}
答案 2 :(得分:2)
请参阅here,您需要转到步进位置参数。
答案 3 :(得分:1)
尝试这样的事情:
# Iterating through the provided arguments
for ARG in $*; do
if [ -f filename_$ARG.txt]; then
grep "$str" filename_$ARG.txt
fi
done
答案 4 :(得分:0)
args=$@;args=${args// /,}
grep "foo" $(eval echo file{$args})