Я просматривал некоторый 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
Последний является единственным, который имеет для меня какой-то смысл.
Корншелл просто игнорирует обратные слэши, или, может быть, просто конвертирует их в персонажа перед обратным слэшем?Я предполагал, что добавление \n
в любом месте командной строки будет новой строкой, но, видимо, только в кавычках или \\n
.
Может кто-нибудь объяснить, что делает ksh с обратной косой чертой в командной строке?
В любом случае, я предполагаю, что лучший способ написать команду, которую я изначально задал, был бы:
scriptname=$(basename $0)
вместо:
scriptname=$(\basename $0)
Это имеет значение?
Заранее спасибо!