对于Bash中的循环,只对第一个位置arg采取行动

时间:2016-10-26 18:51:34

标签: bash

假设我有以下脚本:

for arg in "$var1" "$var2" "$var3" "$varN" ; do  
  echo $arg; 
done;

我想要完成的是do如果我正在迭代并且我在第一个位置参数上。我认为它会是这样的:

for arg in "$var1" "$var2" "$var3" "$varN" ; do  
  if [ *some condition* ]; then
    *action*
  else
    if [ *first positional arg* ];
      echo *first positional argument*
  fi
done;

初学者用bash所以点亮我吧:)。

3 个答案:

答案 0 :(得分:0)

有很多方法可以解决这个问题。您可以在循环之前处理$ var1或添加如下所示的条件:

handled_first=false
for arg in "$var1" "$var2" "$var3" "$varN" ; do 
  if ! $handled_first; then
    # do stuff
    handled_first=true
    continue
  fi
  # other stuff
done

答案 1 :(得分:0)

如果我有这个权利,你想在传递给脚本的第一个参数上做一件事,而在其他事件上做另一件事:

echo $1
for arg in "${@:2}"; do
    *action*
done

echo $1替换为您想要为第一个参数发生的任何内容。 "${@:2}"是从第二个开始的所有参数的数组,因此您可以将其用于其他操作。

答案 2 :(得分:0)

将第一个位置参数分配给变量。然后使用shift将其从位置参数中删除,并循环遍历参数。

firstarg=$1
# do stuff with $firstarg
shift # remove first arg
for arg; do
    echo "$arg"
done