Как присвоить "-e" переменной в bash

В одну сторону:

$ cat file 
Unix Linux Trumpet Perl 1|1 1|2 1|3
$
$ awk -F"[ |]" '{
 printf "%-10s %-10s %-10s %-10s %-3s %-3s %-3s\n","","","","",$5,$7,$9;
 printf "%-10s %-10s %-10s %-10s %-3s %-3s %-3s\n",$1,$2,$3,$4,$6,$8,$10;
 }' file
                                            1   1   1
Unix       Linux      Trumpet    Perl       1   2   3
0
25.08.2019, 13:52
2 ответа

Это работает, но выполнение echo -eничего не выводит в Bash, если обе опции posixи xpg_echoне включены, так как -eинтерпретируется как опция:

$ help echo
echo: echo [-neE] [arg...]
    Write arguments to the standard output.

    Display the ARGs, separated by a single space character and followed by a
    newline, on the standard output.

    Options:
      -n        do not append a newline
      -e        enable interpretation of the following backslash escapes
      -E        explicitly suppress interpretation of backslash escapes

Используйте

printf "%s\n" "$var"

вместо этого.

И, как отмечает cas в комментарии, Bashdeclare -p var(typeset -p varв ksh, zsh и yash (и bash ))можно использовать для указания точного типа и содержимого переменной.

См.:Почему printf лучше, чем echo?

5
28.04.2021, 23:30

Команда (, подобная вашей echo), принимает аргументы командной строки, которые могут быть флагами(-eв вашем случае ). Многие команды (, по крайней мере, распространенные версии Linux ), понимают--(два дефиса )как "конец флагов, все, что следует за ними, является обычными аргументами". Таким образом, вы можете удалить файл с извращенным именем -rс помощью rm -- -r.

Для отображения материала printfболее надежен во всех отношениях (, если его сложнее использовать ).

0
28.04.2021, 23:30

Теги

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