这是一个脚本,它在第一个参数中获取要搜索的单词,然后在该单词中搜索要搜索的文件列表。
例如,我如何运行它:./my_script book *
。
for file in ${*:2}; do
if [[ -f "$file" ]]; then
search_file "$1" $file
fi
(search_file)是上面定义的函数。
问题是它会跳过名称中包含空格的文件。我想这是因为${*:2}
,所以我应该在那里写什么?
顺便说一下 - 我应该在第三行写$file
还是"$file"
?
答案 0 :(得分:0)
运行你的脚本如下(将*放在单引号中),如果文件名中有空格或不可打印的字符,这可以解决你的问题
./my_script book '*'
使用“$ file”优于$ file
答案 1 :(得分:0)
使用"$@"
(引用)代替不带引号的$*
,并确保在$file
引用它的任何地方引用。
for file in "${@:2}"; do
if [[ -f "$file" ]]; then
search_file "$1" "$file"
fi
稍微更清楚的是使用shift
从位置参数集中删除第一个参数,这样您就可以简单地迭代"$@"
而不使用子字符串扩展运算符。
first=$1
shift
for file in "$@"; do
if [[ -f "$file" ]]; do
search_file "$first" "$file"
fi
(事实上,您可以将for循环缩短为for file; do
,因为迭代位置参数是默认操作,没有in
列表。)