gpt4 book ai didi

bash - Shell脚本解释代码和参数

转载 作者:行者123 更新时间:2023-12-04 18:40:18 25 4
gpt4 key购买 nike

我有以下 shell 脚本,他们问我如何工作以及 $1 和 $2 参数是什么。

#!/bin/bash

for i in `sort $1`; do
if grep $2 $i > /dev/null; then
echo A
cp $i /tmp
exit
fi
done
echo B;

我的问题是:$1 不能是目录,因为您不能对目录进行排序。因此,它必须是一个文件。但是“for i in file”功能意味着我们将为每一行工作,而“grep”工具不适用于行。

我认为它应该是一个包含文件的文件,但现在我只能想到 tar 文件,它不适用于它们。

谢谢!

最佳答案

sort $1很可能意味着 $1包含文件的路径。该文件的内容很可能是其他文件的路径。在其未引用的形式中,它将受到分词和全局扩展的影响。这要么是疏忽,要么是有意的行为(例如,它会将 'dat?.lst' 扩展为文件列表,如评论中所述)。
for loop 假设这些路径都不包含任何尴尬的字符(空格、全局字符,如 * ),并遍历排序输出中的每个单词。
$2 (实际上应该是 "$2" )是在文件 $i 中搜索的模式.如果文件的内容与模式匹配,则将文件复制到 /tmp脚本退出。

鉴于不使用包含换行符的文件名的警告,最简单的解决方法是:

#!/bin/bash

sort "$1" | while read -r file; do
if grep -q "$2" "$file" 2>/dev/null; then
echo A
cp "$file" /tmp
exit
fi
done

这假定脚本将文件的路径作为第一个参数传递,例如:
/path/to/first/file
/path/to/second/file

和一个正则表达式作为第二个参数, $ s 转义以防止 shell 尝试扩展它们。

关于bash - Shell脚本解释代码和参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49539603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com