我正在查看一些 ksh 代码,遇到了一条我认为行不通的代码。在测试代码后,它确实有效,但我不知道为什么。
如果重要的话,这是在 AIX 5.3 系统上运行的。
代码中的行是:
scriptname=$(\basename $0)
由于命令前面的反斜杠,我认为它不会起作用basename
,但是当我测试scriptname
变量时,它具有正确的值。
我在命令行上做了一些进一步的测试:
$ echo $(\echo test)
test
$ echo $(\echo \test)
test
$ echo $(\e\c\h\o \test)
test
$ echo `\e\c\h\o \test`
test
$ echo $(\echo "\test")
est
我在命令替代之外尝试了它,但它仍然没有像我想象的那样工作:
$ \echo \testi\ng
testing
$ \echo "\testi\ng"
esti
g
最后一个是唯一对我有意义的。
Kornshell 是否只是忽略反斜杠,或者只是将它们转换为反斜杠前面的字符?我假设\n
在命令行上的任何地方都将是换行符,但显然只有在引号中或\\n
.
有人可以解释一下 ksh 在命令行上对反斜杠的作用吗?
无论哪种方式,我认为编写我最初质疑的命令的更好方法是:
scriptname=$(basename $0)
代替:
scriptname=$(\basename $0)
有关系吗?
提前致谢!