当我运行以下命令时
./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