连接bash脚本中的字符串(与shell不同的行为)

时间:2011-05-04 11:29:58

标签: linux bash string

当我在常规shell中编写它时,我正在尝试一些工作正常的工作人员,但是当我将它包含在bash脚本文件中时,它却没有。 第一个例子:

m=`date +%m`
m_1=$((m-1))
echo $m_1

这给了我上个月的值(实际减1),但如果从脚本执行则不起作用。

第二个例子:

m=6
m=$m"t"
echo m

这会在shell中返回“6t”(用“t”连接$ m),但是从脚本执行时只给我“t”。

我认为所有这些都可以由经验丰富的Linux用户轻松解答,但我只是在学习。

提前致谢。

3 个答案:

答案 0 :(得分:2)

重新检查语法。

您的第一个代码段可以从命令行 bash sh 工作,因为您的语法有效sh。在我看来,你的脚本文件中可能有拼写错误:

~$ m=`date +%m`; m_1=$((m-1)); echo $m_1
4
~$ cat > foo.sh
m=`date +%m`; m_1=$((m-1)); echo $m_1
^C
~$ bash foo.sh
4
~$ sh foo.sh
4

同样适用于带有更正的其他代码段:

~$ m=6; m=$m"t"; echo $m
6t
~$ cat > foo.sh
m=6; m=$m"t"; echo $m
^C
~$ bash foo.sh
6t
~$ sh foo.sh
6t

答案 1 :(得分:1)

确保脚本的第一行是

#!/bin/bash

而不是

#!/bin/sh

如果显式运行为bash,Bash将仅启用其扩展功能。如果以sh运行,它将以POSIX兼容模式运行。

答案 2 :(得分:0)

首先,它在脚本和终端上对我很好。 其次,你的最后一行echo m只会输出“m”。我认为你的意思是“$ m”..