Каково различие между, объявляют и набирают

ОБНОВЛЕНИЕ: добавленный сценарий (не один лайнер, хотя), который позволяет Вам выбирать, какие столбцы Вы хотите выровненный по ширине... Это обслуживает Левое (значение по умолчанию) и Право (не Центр).. Как есть это ожидает, что ВКЛАДКА разграничила поля. Можно изменить выходной разделитель столбца через $S.

RJustCol=(2 3 5)  # Set columns to be right justified.
RJustRex=; Q=$'\x01'; R=$'\x02'; S=" | "
for r in ${RJustCol[@]} ;do  # Build the Right-justify regex.
  RJustRex="${RJustRex}s/^(([^\t]+\t){$((r-1))})([^\t]+)\t/\1\3$R\t/; "
done
sed -r "s/$/\tZ/g; s/^/$Q/; s/\t/\t$Q/g; $RJustRex" file |
  column -t -s $'\t' | 
    sed -r "s/  $Q/$Q/g; s/$Q([^$Q$R]*)$R([^$Q]*)/$S\2\1/g; s/$Q/$S/g; s/Z$//"

Типичный вывод:

| The Lost Art       |   +1255 |  789 | Los                 |     -55 | 
| of the Idle Moment | -159900 | 0123 | Fabulosos Cadillacs | +321987 | 

Примечание:column не работает, поскольку Вы могли бы ожидать, когда у Вас есть пустые ячейки.

Option -n
        By default, the column command will merge multiple adjacent
        delimiters into a single delimiter when using the --t option;
        this option disables that behavior. This option is a Debian
        GNU/Linux extension.

Отсюда на исходный ответ, который связан с, но конкретно не решает tne основную проблему th вопроса..

Вот "острота", которая удовлетворяет целым числам (и позволяет +/-знаки).. "X" силы заполнителя column к правильной клавиатуре последняя ячейка.

sed 's/$/\tX/g' file |column -t |sed -r 's/([-+]?[0-9.]+)( +)/\2\1/g; s/^  //; s/X$//'

Типичный вывод

  +1255  789  011      -55       34
-159900   33  022  +321987  2323566

Если у Вас есть значения плавающие или плавания, смешанные с целыми числами или просто целыми числами, (дополнительное продвижение +/-знаки), немного больше работ перестановки.

sed -r 's/$/\tX/; 
        s/([-+]?[0-9]+\.[0-9]+)\t/\1@\t/g
        s/([-+]?[0-9]+)\t/\1.@\t/g
        s/\./\t./g' file |
  column -t |
    sed -r 's/  \././g
            s/([-+]?[0-9.]+)( +)/\2\1/g
            s/\.@/ /g
            s/@//g
            s/ +X$//'

Типичный вывод

+1255       789   0.11   -55           34
  -15.9900   33   0.22  +321.987  2323566
23
21.03.2013, 09:21
2 ответа

В bash, typeset и declare точно то же. Единственная разница - это typeset считается устаревшим.

typeset: typeset [-aAfFgilrtux] [-p] name[=value] ...
    Set variable values and attributes.

    Obsolete.  See `help declare'.

Страница справочника даже перечисляет их на одном дыхании:

declare [-aAfFgilrtux] [-p] [name[=value] ...]
typeset [-aAfFgilrtux] [-p] [name[=value] ...]
    Declare variables and/or give them attributes.

typeset является портативным к некоторым другим оболочкам, например, ksh93. При стремлении к мобильности перекрестной оболочки использовать typeset (и удостоверьтесь, что способ, которым Вы называете его, является портативным). Если Вы не заботитесь о такой мобильности, использовать declare.

28
27.01.2020, 19:42
  • 1
    может Вы обеспечивать некоторый пример где и почему это использование в сценарии удара спасибо –  Rahul Patil 25.02.2013, 10:54
  • 2
    ... как я сказал, они - точно то же. Я не понимаю, как я могу дифференцировать их, если они так. –  Chris Down 25.02.2013, 12:04
  • 3
    Хороший. Обратите внимание, что "устаревший" просто появляется в help typeset, не в man typeset. –  fedorqui 22.07.2014, 11:05
  • 4
    @ChrisDown, Вы, оказалось бы, не знали бы почему, точно, typeset считается устаревшим? –  Alexej Magura 05.10.2016, 05:40

Я знаю случай где declare полезно для предотвращения зла eval : переменная косвенность:

$ var=foo
$ x=var
$ declare "$x=another_value"
$ echo $var
another_value
3
27.01.2020, 19:42
  • 1
    Это - хороший комментарий, но как это отвечает на вопрос, о котором typeset и declare? –  jw013 25.02.2013, 18:40
  • 2
    Этому уже хорошо отвечает Chris Down, мой ответ является просто случаем, где это - usefull –  Gilles Quenot 25.02.2013, 19:31
  • 3
    Возможно, я не был ясен. Комментарии должны быть комментариями, и ответы должны быть ответами. Это - комментарий, не ответ. –  jw013 25.02.2013, 22:32
  • 4
    Мой отрывок не очистился бы в комментарии –  Gilles Quenot 25.02.2013, 23:52
  • 5
    , но все еще можно присвоиться, переменные с набранным... просто заменяют, объявляют с набранным, и Вы все еще получаете тот же результат. –  pcarvalho 28.11.2017, 17:14

Теги

Похожие вопросы