gpt4 book ai didi

linux - 使用 'grep - i *.sh' 和 'grep -i .sh' 的输出差异。请解释一下这个异常?

转载 作者:太空宇宙 更新时间:2023-11-04 04:48:09 26 4
gpt4 key购买 nike

grep - i *.shgrep -i .sh 给出不同的输出。但两者应该有相同的输出。

cat baklol.sh | grep - i *.sh

文件baklol.sh包含以下内容:

#wget  ${WGET_OPTS} "$BASE_URL"/kits/client_setup/bulldozer_nightly_config.sh --output-document=bulldozer_nightly_config.sh
#wget ${WGET_OPTS} "$BASE_URL"/kits/client_setup/51_nightly_config.sh --output-document=51_nightly_config.sh
#wget ${WGET_OPTS} "$BASE_URL"/kits/client_setup/60_nightly_config.sh --output-document=60_nightly_config.sh
#wget ${WGET_OPTS} "$BASE_URL"/kits/client_setup/crane_nightly_config.sh --output-document=crane_nightly_config.sh
#wget ${WGET_OPTS} "$BASE_URL"/kits/client_setup/nightly_config.sh --output-document=nightly_config.sh
#wget ${WGET_OPTS} "$BASE_URL"/kits/client_setup/70_nightly_config.sh --output-document=nightly_config.sh
wget ${WGET_OPTS} "$BASE_URL"/kits/client_setup/trunk_nightly_config.sh --output-document=nightly_config.sh

命令1:cat baklol.sh | grep - i .sh

#wget  ${WGET_OPTS} "$BASE_URL"/kits/client_setup/bulldozer_nightly_config.sh --output-document=bulldozer_nightly_config.sh
#wget ${WGET_OPTS} "$BASE_URL"/kits/client_setup/51_nightly_config.sh --output-document=51_nightly_config.sh
#wget ${WGET_OPTS} "$BASE_URL"/kits/client_setup/60_nightly_config.sh --output-document=60_nightly_config.sh
#wget ${WGET_OPTS} "$BASE_URL"/kits/client_setup/crane_nightly_config.sh --output-document=crane_nightly_config.sh
#wget ${WGET_OPTS} "$BASE_URL"/kits/client_setup/nightly_config.sh --output-document=nightly_config.sh
#wget ${WGET_OPTS} "$BASE_URL"/kits/client_setup/70_nightly_config.sh --output-document=nightly_config.sh
wget ${WGET_OPTS} "$BASE_URL"/kits/client_setup/trunk_nightly_config.sh --output-document=nightly_config.sh

命令2:cat baklol.sh | grep -i *.sh

#wget  ${WGET_OPTS} "$BASE_URL"/kits/client_setup/51_nightly_config.sh --output-document=51_nightly_config.sh
#wget ${WGET_OPTS} "$BASE_URL"/kits/client_setup/60_nightly_config.sh --output-document=60_nightly_config.sh

最佳答案

为什么你期望它们有相同的输出? Bash 中的空白不是是任意的。

grep -i .sh标准输入中的任何字符 (.) 进行不区分大小写 (-i) 搜索,后跟 sh

grep - i *.sh 将简单地在当前目录中名为 i文件以及所有以 .sh 结尾的文件中搜索字符串 -:

$ cd $(mktemp -d)
$ printf - > i
$ grep - i *.sh
i:-
grep: *.sh: No such file or directory

命令 2 几乎是无意义的 - 如果当前目录中有一个 shell 文件,*.sh 将扩展为该文件名(大概是 baklol.sh),并且 that 将是 grep模式。换句话说,您要在 baklol.sh 中搜索以 baklol 开头、后跟任何单个字符 (.) 和 sh 的字符串。如果目录中有多个 .sh 文件,则 man 页面似乎表明它将在第二个及后续文件中搜索与第一个文件名对应的模式,并忽略标准输入。

关于linux - 使用 'grep - i *.sh' 和 'grep -i .sh' 的输出差异。请解释一下这个异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22167266/

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