2013-07-09 5 views
-1

Интересная проблема/тайна Я недавно встретил ... Пытается назначить строки вывода из простой команды переменной. Команда создает выходные линии, которые каждый выглядеть следующим образом:
courcl, TESTRECOV, 0000008201, * ** , NeedsRecovery, 133302,20130709,133302,20130709 Я просто пытался «захватить» первые два символы 4-го поля (в данном случае, « *») из каждой строки текста, присваивая переменной называется SYSCODE, используя: SYSCODE = echo ${JOB}|cut -f4 -d,|cut -c1-2Ошибка присвоения команды переменной

Когда я выполняю это назначить в командной строке, SYSCODE получает присвоено: "chkjq.sh chkjq.sh.2011-05-13 chkjq.sh.2013-06-25 copytest jobchk.log lc lc2" (это просто o utput команды ls !! Странный!!). Интересно, что когда я выполняю эхо $ {JOB} | cut -f4 -d, | cut -c1-2 из подсказки ksh, это правильно echos **.

Очень озадачивает меня! Любые идеи, что я могу делать неправильно? Большое спасибо!


Выяснил это. Если результат моего назначения переменной заканчивается звездочкой (* ), как в моем примере, что иногда будет иметь место в моей ситуации, тогда необходимо указать эту переменную, когда я просто показываю ее (эхо ее) на подсказка ksh. Поэтому я должен был набирать echo «$ SYSCODE», а не просто echo $ SYSCODE в подсказке ksh - поскольку echo *, как ни странно, создает текущий список каталогов! Тайна решена! Надеюсь, кто-то может воспользоваться этим вопросом/ответом! Благодаря!

ответ

0

Итак, когда мы пришли из Linux. Некоторые сценарии оболочки не работают в KSH. Потому что некоторые соглашения - это только ресурс Bash (называемый Bashism). Итак, проверьте эту ссылку о некоторых «башизмах» с: Bashism - Greg's Wiki

Смежные вопросы