Я намагаюся надрукувати -n
за допомогою echo
команди. Але якщо я просто набираю echo -n
, він видає лише новий рядок, а не з'являється -n
, натомість видає новий рядок.
getopt
(???) для розбору командного рядка
Я намагаюся надрукувати -n
за допомогою echo
команди. Але якщо я просто набираю echo -n
, він видає лише новий рядок, а не з'являється -n
, натомість видає новий рядок.
getopt
(???) для розбору командного рядка
Відповіді:
Проблема в тому, що echo
інтерпретує -n
як аргумент. У реалізації bash за замовчуванням це означає (від help echo
):
-n do not append a newline
Існують різні способи подолання цього:
Перетворіть його в щось, що не є варіантом, включивши інший символ. Наприклад, скажіть, echo
щоб не друкувати новий рядок -n
, а потім скажіть його для інтерпретації відхилень зворотньої косої -e
лінії та явно додайте новий рядок.
$ echo -ne '-n\n'
-n
Крім того, просто включіть пробіл
$ echo " -n"
-n
Це, однак, додає простір, якого ви, мабуть, не хочете.
Використовуйте перед ним символ, що не друкується. Ось Я використовую backspace ( \b
)
$ echo -e "\b-n"
-n
Це також додає додатковий характер, який ви, мабуть, не хочете.
Використовуйте хитрість
$ echo n- | rev
-n
rev
Команда просто виводить його вихідний зворотний.
Скористайтеся правильним інструментом для роботи
$ printf -- '-n\n'
-n
grep '^-n'
. pritnf
це справді шлях.
printf
краще все-таки, але питання стосується справедливості echo
.
echo -e "-n\c"
це робить точно.
\c
подавляє подальший вихід
Іноді корисно використовувати правильний інструмент. Ви можете використовувати printf
замість цього:
% printf "-n\n"
-n
echo
, в той час printf
як краще стандартизований .
Ви можете використовувати цю команду, але це додає додаткового простору.
echo -e "\r-n"
Це свого роду хакер.
-e
вмикає символи командної зворотної косої риски.
\r
- повернення вагона.
Насправді будь-який \
дійсний символ буде виконуватись у будь-якому місці рядка.
Ви можете бачити, які дійсні help echo
.
echo "-n"
не працює, тому що -n
використовується як параметр для echo
.
PS Найкраще рішення ІМХО
echo -e "-n\c"
Це не додає зайвих символів .
echo -e "-n\n"
друкує те саме, але з новою лінією char.
-n
дійсно, -nfoo
не так, що буде надруковано.
man echo
теж є. Але help
трохи краще.
/bin/echo
зовсім інша річ, і коли ти працюєш echo
у баш, ти отримуєш вбудований, який може бути зовсім різним, залежно від твоїх оболонок.
Я думаю, якщо ви обов'язково хочете використовувати echo
лише це, це повинно вас задовольнити:
echo "-n "
Це працює, тому що поки -n
це допустимий варіант для echo
, -n
пробілу після нього немає. Оскільки це не варіант, echo
просто надрукуйте його.
Ви, хлопці, справді це передумуєте.
echo -e \\055n
Або без задніх рядків
echo -en \\055n
printf "-n\n"
переосмислення?
/bin/echo
принаймні, якщо його викликають якecho -e "\055n"
Щоб поширити відповідь @ AB, єдиний портативний спосіб використання echo
- це утриматися від використання будь-яких варіантів, таких як -n
. Розгляньте використання printf
замість того, де це можливо. Ця довідкова сторінка містить більш детальну інформацію та дуже добре пояснює, коли і як echo
і яким чином printf
слід користуватися:
Сьогодні ехо (1) є портативним лише у тому випадку, якщо ви опустіть прапори та уникнете послідовності. Використовуйте натомість printf (1), якщо вам потрібно більше, ніж звичайний текст.
У сценарії Bash ви можете запустити:
echo -n -
echo n
Або в інтерактивній оболонці:
echo -n - ; echo n
Це echo
і є -
персонаж, і n
персонаж.
-pilot6@Pilot6:~$
. Другий вихід n
.
&&
- я б не дуже сказав, що ця відповідь неправильна .
Можна бігати
printf -n;echo
Випробуваний у золі Busybox
ash
- назва оболонки Алмкіста.
echo -n -- -n
працює (у вас немає зручності для тестування скриньки Linux)?