Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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_Grep_Sh - Fatal编程技术网

Bash “某物”指的是什么

Bash “某物”指的是什么,bash,grep,sh,Bash,Grep,Sh,我正在阅读grep源代码,发现egrep.sh包含以下内容: #!@SHELL@ grep=grep case $0 in */*) dir=${0%/*} if test -x "$dir/@grep@"; then

我正在阅读
grep
源代码,发现
egrep.sh
包含以下内容:

#!@SHELL@                          
grep=grep                          
case $0 in                         
  */*)                             
    dir=${0%/*}                    
    if test -x "$dir/@grep@"; then 
      PATH=$dir:$PATH              
      grep=@grep@                  
    fi;;                           
esac                               
exec $grep @option@ "$@"
我似乎不明白
@SHELL@
@grep@
@option@
是如何工作的,甚至不明白它们在使用的上下文中是如何工作的


参考源位于:

根据评论,我阅读了,发现
@something@
是要用
sed
替换的占位符,如下所示:

sed -e 's|[@]SHELL@|$(SHELL)|g'                 \
    -e "$$edit_substring"                   \
    -e "s|[@]grep@|$$grep|g"                    \
    -e "s|[@]option@|$$option|g" <$(srcdir)/egrep.sh >$@-t
$(AM_V_at)chmod a=rx $@-t
$(AM_V_at)mv $@-t $@
sed-e的|[@]SHELL$(SHELL)| g'\
-e“$$edit_子字符串”\
-e“s|[@]grep@$$grep|g”\
-e“s”[@]选项|$$选项| g”$@-t
$(AM_V_at)chmod a=rx$@-t
$(上午五时)mv$@-t$@

在构建过程中的某个时候,它们可能会被
sed
或类似的工具所取代(例如:
sed s#@SHELL@/bin/bash
)。“你能链接到你正在查看的版本吗?”CarlNorum在source@CarlNorum你是对的,我没有检查Makefile的
sed-e的SHELL$(SHELL)g'\-e“$$edit\u substring”\-e“s”\[@]grep@$$grep“g”\-e“s”option“$$option”$@-t
:)该文件应命名为“egrep.sh.in”或某物.in”。被配置的文件通常命名为“foo.in”,替换(sedding)用于“配置”文件。