如何从命令行读取Bash中的glob?我尝试了这个,它只获取了glob中的第一个文件:
#!/bin/bash
shopt -s nullglob
FILES=$1
for f in $FILES
do
echo "Processing $f file..."
echo $f
done
Run Code Online (Sandbox Code Playgroud)
假设我的脚本是script.sh.我想称之为sh script.sh /home/hss/* 4 gz
(在哪里/home/hss/*,4并且gz是命令行参数).当我尝试上面的脚本时,它只读取第一个文件.有任何想法吗?
Pau*_*ce. 10
您需要访问传递给脚本的参数的所有内容.在执行脚本之前,由shell扩展glob.
你可以复制数组:
#!/bin/bash
FILES=("$@")
for f in "${FILES[@]}"
do
echo "Processing $f file..."
echo "$f"
done
Run Code Online (Sandbox Code Playgroud)
或者直接迭代:
#!/bin/bash
for f # equivalent to for f in "$@"
do
echo "Processing $f file..."
echo "$f"
done
Run Code Online (Sandbox Code Playgroud)
或使用shift:
#!/bin/bash
while (($# > 0))
do
echo "Processing $1 file..."
echo "$1"
shift
done
Run Code Online (Sandbox Code Playgroud)
在调用脚本时,您需要引用包含shell元字符的任何参数,以避免路径名扩展(由您当前的shell):
sh script.sh "/home/hss/*" 4 gz
Run Code Online (Sandbox Code Playgroud)
因此$1将分配模式而不是第一个匹配的文件.