Macos Mac上终端中echo语句中的转义值
因此,我一直在努力为.bash_配置文件添加一些别名,以便在我的Mac上更轻松地设置composer PHP/composer项目。我已经非常接近完成这项工作,但我遇到了一个问题。我试图将一个字符串输出到我正在创建的文件中,但单引号不断被删除 我正在设置的别名如下所示: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' ?>;" >>
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'" "" "?>"
如果你想要更清晰的缩进,你也可以使用伟大的答案!非常感谢您提供的所有信息。回答得很好!非常感谢您提供的所有信息。