为什么这个 bash 脚本不起作用?

为什么这个 bash 脚本不起作用?

当我运行以下命令时

./command *

使用此脚本

#!/bin/bash

for f in ./$1
do
    echo $f
done

仅回显 $1 中指定的第一个文件。我的问题是为什么?

答案1

因为您在运行命令时没有使用单引号或双引号:

./command '*'

或者:

./command "*"

或者,如果您一定要使用./command *,那么在您的脚本中进行以下修改:

#!/bin/bash

for f in ./"$@"
do
    echo $f
done

这是因为$1指的是命令中的第一个参数,而$@指的是命令中的所有参数。

另请阅读一些这方面的文献:http://tldp.org/LDP/abs/html/internalvariables.html#APPREF

答案2

运行该命令时,shell 会展开*。因此,运行该脚本相当于

./command file1.txt file2.txt file3.txt

$1对应于第一个参数,因此循环只有一次迭代。

答案3

$1仅引用第一个参数。您需要使用$*

#!/bin/bash

for f in $*
do
     echo $f
done

相关内容