Я намагаюся надрукувати -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'
-ngrep '^-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)?