我正在制作一个简单的脚本,该脚本遍历当前目录中的文件,
$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
答案 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"