Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/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
Macos Mac上终端中echo语句中的转义值_Macos_Terminal_Macos Sierra - Fatal编程技术网

Macos Mac上终端中echo语句中的转义值

Macos Mac上终端中echo语句中的转义值,macos,terminal,macos-sierra,Macos,Terminal,Macos Sierra,因此,我一直在努力为.bash_配置文件添加一些别名,以便在我的Mac上更轻松地设置composer PHP/composer项目。我已经非常接近完成这项工作,但我遇到了一个问题。我试图将一个字符串输出到我正在创建的文件中,但单引号不断被删除 我正在设置的别名如下所示: alias sp='touch index.php; echo "<?php \n\n require_once __DIR__ . $ '/vendor/autoload.php' ?>;" >>

因此,我一直在努力为.bash_配置文件添加一些别名,以便在我的Mac上更轻松地设置composer PHP/composer项目。我已经非常接近完成这项工作,但我遇到了一个问题。我试图将一个字符串输出到我正在创建的文件中,但单引号不断被删除

我正在设置的别名如下所示:

alias sp='touch index.php; echo "<?php  \n\n  require_once __DIR__ . $ '/vendor/autoload.php' ?>;" >> index.php; open/Applications/TextWrangler.app index.php;'
alias sp='touch index.php;echo“;”>>index.php;打开/Applications/TextWrangler.app index.php;'
我在php文件中得到的输出是:

<?php  \n\n require_once __DIR__ . $ /vendor/autoload.php \n\n ?>

我已尝试使用\e和$'string'进行转义


但是没有运气。

简短回答:当做任何不寻常的事情时,使用函数而不是别名,使用
printf
而不是
echo

长句回答:眼前的问题是引号不能嵌套。您试图在包含单引号的别名周围使用单引号,但这行不通。shell将您的命令解析为包含单引号段
'touch index.php;echo“;”>>index.php;打开/Applications/TextWrangler.app index.php;'--它删除引号,将它们混合在一起,并将结果指定为别名

有很多方法可以解决这个问题,但它们很难看。例如
alias sp='touch…$'“'”/vendor/…
——在这里,第一个单引号结束单引号段,然后是包含单引号的双引号段,然后是另一个单引号段的开头。呜呜

实际上,当定义别名变得如此复杂时,最好切换到函数。除其他事项外,它们不需要被引用,因此整个问题都没有意义:

sp() {
    touch index.php
    echo "<?php  \n\n  require_once __DIR__ . $ '/vendor/autoload.php' ?>;" >> index.php
    open/Applications/TextWrangler.app index.php
}
使用
printf
有几种方法可以做到这一点。最简单的方法可能是将每一行设为参数,并使用格式字符串在每一行后面加一个换行符:

printf '%s\n' "<?php" "" "require_once __DIR__ . \$ '/vendor/autoload.php'" "" "?>"

如果你想要更清晰的缩进,你也可以使用
简短的回答:当做任何不重要的事情时,使用函数而不是别名,使用
printf
而不是
echo

长句回答:眼前的问题是引号不能嵌套。您试图在包含单引号的别名周围使用单引号,但这行不通。shell将您的命令解析为包含单引号段
'touch index.php;echo“;”>>index.php;打开/Applications/TextWrangler.app index.php;'--它删除引号,将它们混合在一起,并将结果指定为别名

有很多方法可以解决这个问题,但它们很难看。例如
alias sp='touch…$'“'”/vendor/…
——在这里,第一个单引号结束单引号段,然后是包含单引号的双引号段,然后是另一个单引号段的开头。呜呜

实际上,当定义别名变得如此复杂时,最好切换到函数。除其他事项外,它们不需要被引用,因此整个问题都没有意义:

sp() {
    touch index.php
    echo "<?php  \n\n  require_once __DIR__ . $ '/vendor/autoload.php' ?>;" >> index.php
    open/Applications/TextWrangler.app index.php
}
使用
printf
有几种方法可以做到这一点。最简单的方法可能是将每一行设为参数,并使用格式字符串在每一行后面加一个换行符:

printf '%s\n' "<?php" "" "require_once __DIR__ . \$ '/vendor/autoload.php'" "" "?>"

如果你想要更清晰的缩进,你也可以使用
伟大的答案!非常感谢您提供的所有信息。回答得很好!非常感谢您提供的所有信息。