进入for循环后获取变量的原始值

时间:2020-05-30 21:37:39

标签: bash for-loop

我正在制作一个简单的脚本,该脚本遍历当前目录中的文件, $1用于大小参数,其他$1,$2 .....用于操作文件并设置文件名。 问题是使用for循环后,变量将丢失其值,并以1,2,3之类的整数开头,除非我使用名为1,2,3,的文件,否则脚本将无法工作。 .. 如何保留原始值? 例如: ./script 50 my_first_file .....

#!/bin/bash
size=$1
allfiles=$#
shift
#here the value of the $1 is "my_first_file"
  for ((i = 1 ; i < allfiles ; i++))
  do
  #here the value of the $1 = 1
  done

2 个答案:

答案 0 :(得分:1)

您可以像这样直接对参数进行循环,而不是对整数使用for循环:

#!/bin/bash

size="$1"
allfiles=$#
shift

counter=1
for i in "$@"
do
    echo "$counter= $i"
    (( counter = counter + 1 ))
done

echo "size= $size"

这将按顺序显示每个参数。 如果需要显示或使用每个参数的位置,可以使用一个计数器。

如果我这样称呼:script.bash 25 a b c 输出为:

1= a
2= b
3= c
size= 25

答案 1 :(得分:1)

另一种选择是只需循环浏览文件。

#!/usr/bin/env bash

size=$1
shift

counter=1

for f; do
  printf '%d. %s\n' "$((counter++))" "$f"
done

printf 'size=%s\n' "$size"