Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash:文件名作为参数,在循环中执行操作_Bash_For Loop_Parameters - Fatal编程技术网

bash:文件名作为参数,在循环中执行操作

bash:文件名作为参数,在循环中执行操作,bash,for-loop,parameters,Bash,For Loop,Parameters,我当前的脚本如下所示: #!/bin/bash victims=*asci* for f in $victims ; do awk /some blah blah here/ ;done 因此,基本上,所有文件的名称中都包含ascii,并对其执行操作 但是,我希望将文件名作为参数输入。比如: 例如,bash myscript.sh*log* 使用时 #!/bin/bash victims="$1" for f in $victims ; do awk /some blah blah

我当前的脚本如下所示:

#!/bin/bash

victims=*asci*

for f in $victims ; do
awk /some blah blah here/  ;done
因此,基本上,所有文件的名称中都包含ascii,并对其执行操作

但是,我希望将文件名作为参数输入。比如: 例如,bash myscript.sh*log*

使用时

#!/bin/bash

victims="$1"

for f in $victims ; do
awk /some blah blah here/  ;done
它没有达到预期的效果。仅对第一个文件执行(据我记忆所及)


我可以请你帮忙吗?希望脚本在文件名中包含参数的一组文件上执行函数。老实说,我对bash不是很有经验。谢谢,干杯

如果您只是调用
awk
,那么您甚至不需要
for
循环。一次传递所有文件名即可

awk '/whatever/' "$@"
如果要循环所有命令行参数,请编写:

for f in "$@"; do
    ...
done
或者,由于“$@”中的
暗示:

for f; do
    ...
done
如果要将它们存储在中间变量中,则需要使用数组:

victims=("$@")

for f in "${victims[@]}"; do
    ...
done
此外,应该避免显式调用
bash
。直接运行脚本,这样它就可以使用shebang行中列出的任何shell

bash myscript.sh *log*
./myscript.sh *log*
bash myscript.sh*日志*
./myscript.sh*日志*

如果您只是调用
awk
,那么您甚至不需要
for
循环。一次传递所有文件名即可

awk '/whatever/' "$@"
如果要循环所有命令行参数,请编写:

for f in "$@"; do
    ...
done
或者,由于“$@”
中的
暗示:

for f; do
    ...
done
如果要将它们存储在中间变量中,则需要使用数组:

victims=("$@")

for f in "${victims[@]}"; do
    ...
done
此外,应该避免显式调用
bash
。直接运行脚本,这样它就可以使用shebang行中列出的任何shell

bash myscript.sh *log*
./myscript.sh *log*
bash myscript.sh*日志*
./myscript.sh*日志*

您需要注意如何调用脚本。假设您的脚本myscript.sh是

victims="$1"
echo "$victims"
您的cwd包含文件a.log、另一个.log和logmore.txt

然后,执行

myscript.sh *log*
myscript.sh a.log another.log logmore.txt
结果会很简单

a.log
因为在调用myscript.sh之前,shell会解释“
*log*
”。事实上,你正在执行

myscript.sh *log*
myscript.sh a.log another.log logmore.txt
您的脚本只处理第一个参数。同样有趣的是,当您的cwd不包含名称中带有“log”的文件时,您的脚本将导致:

*log*
因此,您的电话应该是:

myscript.sh "*log*"

您的脚本应该处理这样一个事实:它的输入可能是一个正则表达式。现有文件名。

您需要注意如何调用脚本。假设您的脚本myscript.sh是

victims="$1"
echo "$victims"
您的cwd包含文件a.log、另一个.log和logmore.txt

然后,执行

myscript.sh *log*
myscript.sh a.log another.log logmore.txt
结果会很简单

a.log
因为在调用myscript.sh之前,shell会解释“
*log*
”。事实上,你正在执行

myscript.sh *log*
myscript.sh a.log another.log logmore.txt
您的脚本只处理第一个参数。同样有趣的是,当您的cwd不包含名称中带有“log”的文件时,您的脚本将导致:

*log*
因此,您的电话应该是:

myscript.sh "*log*"
您的脚本应该处理这样一个事实:它的输入可能是一个正则表达式。现有文件名