关于shell变量值的截取-通过分隔符-去除前后匹配到的内容
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于shell变量值的截取-通过分隔符-去除前后匹配到的内容相关的知识,希望对你有一定的参考价值。
最近在工作中需要取一个变量的一部分值,举例说明,先看一个变量及值的格式,如 Server="1.1.1.1-server01"
我们可以通过各种支持切片的命令得到server01这一段,如cut,sed, awk 等等命令
其实当熟悉shell编程的可以知道,shell内部的变量处理方式也是可以得到的,可以通过echo $Server#*-的方式,如下图
其实原理为:# 可以理解为剪切裁剪,默认以惰性模式从最左到匹配(即非贪婪模式),两个#代表的是贪婪模式 ,如果没有匹配到,则返回变量值
因为像上样的例子,我们写上两个#效果也是一样的,如果主机名不带-符号 ,那么两个#更加保险
与 # 符号还有一个功能非常类似的,则是百分号%符号
% 也默认以默认以惰性模式匹配,只是是从右边/后面匹配至最末尾,两个% 代表的贪婪模式
[qq-5201351@localhost ~]$ echo $Server%-* 1.1.1.1 [qq-5201351@localhost ~]$ echo $Server%*-* 1.1.1.1 [qq-5201351@localhost ~]$
关于%符号,笔者在工作中应用相对较少,像#还是可能会用到的
如:当一个文件的绝对路径字符串变量值,我们就可以使用$FileFullName##*/的方式得到最后一个文件名(与basedir效果一样了)
尊重别人的劳动成果 转载请务必注明出处:https://www.cnblogs.com/5201351/p/17334586.html
作者:一名卑微的IT民工
出处:https://www.cnblogs.com/5201351
本博客所有文章仅用于学习、研究和交流目的,欢迎非商业性质转载。
博主的文章没有高度、深度和广度,只是凑字数。由于博主的水平不高,不足和错误之处在所难免,希望大家能够批评指出。
博主是利用读书、参考、引用、抄袭、复制和粘贴等多种方式打造成自己的文章,请原谅博主成为一个卑微的IT民工!
如何通过 shell_exec 将 PHP 变量值传递给 Python
【中文标题】如何通过 shell_exec 将 PHP 变量值传递给 Python【英文标题】:How to pass PHP variable values to Python via shell_exec 【发布时间】:2018-08-05 15:11:25 【问题描述】:我在 PHP 文件中定义了一些变量。然后我用这些变量作为参数从 PHP 调用 python 脚本。 但是变量的值不会延续到我的python脚本中,似乎它们作为字符串而不是变量传递:
$first = "doggy";
$second = "kitty";
$command = escapeshellcmd('python ./script.py $first $second');
$output = shell_exec($command);
上面的代码在我的 Python 脚本中分别产生的不是“doggy”和“kitty”,而是字面上的“$first”和“$second”。我想要小狗和小猫。
例如当我在 Python 中打印时:
print sys.argv[1];
>>$first
是我收到的输出。
我的 Python 脚本没有输出任何东西,该脚本与我希望使用这些变量的 API 交互。
我已经尝试过这些以前的帖子,这些帖子似乎接近我的要求。我要么不理解它们,要么它们不工作。有些答案太专业或太模糊。
Passing value from PHP script to Python script
PHP <-> Python variable exchange
如果 shell_exec 不是最好的方法,我愿意接受新的想法。任何和所有的帮助表示赞赏。感谢您花时间查看我的帖子。
【问题讨论】:
尝试用双引号替换单引号:$command = escapeshellcmd("python ./script.py $first $second");
使用双引号,而不是单引号
@Yamakenji,cdarke。谢谢你。从字面上看是几个小时......
【参考方案1】:
单引号字符串将按字面意思显示,而双引号字符串将解释变量和换行符 (\n) 等内容。
因此,将单引号改为双引号:
$command = escapeshellcmd("python ./script.py $first $second");
阅读 PHP 手册中有关字符串的更多信息:http://se1.php.net/manual/en/language.types.string.php
【讨论】:
感谢埃米尔,它成功了。我同时感到非常沮丧和松了一口气。以上是关于关于shell变量值的截取-通过分隔符-去除前后匹配到的内容的主要内容,如果未能解决你的问题,请参考以下文章