Я искал некоторый код ksh и наткнулся на строку, которую я не думал, будет работать. После тестирования кода он работал, но я не уверен, почему.Обратная косая черта в Kornshell
Если это имеет значение, это работает на системе 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
Я попробовал его вне команды subtitution, и она по-прежнему не работает, как я думал, что это будет:
$ \echo \testi\ng
testing
$ \echo "\testi\ng"
esti
g
Последний - единственный, который имеет для меня какой-то смысл.
Разве Kornshell просто игнорирует обратную косую черту или может просто преобразовать их в символ перед обратной косой чертой? Я предположил, что размещение \n
в любой точке командной строки будет символом новой строки, но, видимо, только в кавычках, или \\n
.
Может кто-нибудь объяснить, что делает ksh с обратной косой чертой в командной строке?
В любом случае, я полагаю, лучший способ, чтобы написать команду я первоначально под сомнение будет:
scriptname=$(basename $0)
вместо:
scriptname=$(\basename $0)
ли это значение?
Заранее благодарен!
Интересно. Есть ли недостатки обратной косой черты, кроме как выглядит странно? – BrianH
Ничего, о чем я знаю, кроме смущения незнакомых им людей. – Darron