2013-03-08 83 views
2

我在脚本编程中总是noob,并试图找出我的代码中的问题在哪里。我有一个带有客户详细信息的文本文件,文件的第一行是用户名,第二行是真实姓名。这个细节我需要传递给PHP。首先,我需要在目录中找到最旧的文件。我创建bash脚本返回的客户用户名:shell_exec里面的变量

oldest=`ls -tr1 temp/data/*.details|head -1` 
head -n1 $oldest 

此发现odest文件(温度/数据/ xxx.details),并返回用户名,让我们说XXX。

现在,到PHP:

$username = shell_exec('./oldest_order.sh'); 
$name = shell_exec('head -2 temp/data/'.$username.'.details | sed -n 2p'); 

我可以在我的PHP获取用户名,于第一线:这是XXX,但第二行是不行的,但是,如果我改变” $的用户名。 “到xxx,它的工作原理,所以问题在这个变量周围的某处。

请指教。

+0

也许一个新的行或空间在年底或年初? var_dump($ username);'给你正确的字符串长度。如果是空格,你可以使用''.trim($ username)''' – jeroen 2013-03-08 21:07:49

+1

'var_dump($ username)'会证实这一点。它会是'string(3)'为'xxx'而没有换行符,而4或5代表xxx WITH cr/lf – 2013-03-08 21:13:02

+0

感谢您的快速回答,jeroen。 'var_dump($ username);'给我'字符串(17)“xxx”'这行在第一个和最后一个名字之间包含空格。换行符号(ctrl-m)先前已被'sed's /.$//''替代 – user2149880 2013-03-08 21:25:16

回答

0

也许在最后或开始处有一个新行或空格。

您可以通过执行var_dump($username);来检查。这会给你字符串的实际长度,以便你可以将它与你认为它应该有的长度进行比较。

如果是在开始或结束空格,你可以使用:

$name = shell_exec('head -2 temp/data/'.trim($username).'.details | sed -n 2p'); 
+0

好的,想通了。我有字符串(17),因为这行只包含16个字符。 'trim'完成这项工作。感谢帮助! – user2149880 2013-03-08 21:48:41