LINUX.ORG.RU

path="$HOME/output.txt"
anonymous
()

Не работает :(

#!/bin/sh
path=~/"output.txt"
echo "sometext" > "$path"
Deleted
()

В твоём примере кавычки вообще не нужны. Баш это не жаваскрипт/с#/c++.

anonymous
()
Ответ на: комментарий от anonymous

Да, но я работаю с путями с кучей пробелов, теперь всё кавычу, это уже паранойя... Вообще, bash в качестве скриптового языка по-моему та еще муть: совершенно неочевидный, очень капризный, везде какие-то подводные камни поджидают... Думаю другой язык выучить.

fingolfin
() автор топика
Ответ на: комментарий от fingolfin

bash очень необычный язык. Он гораздо меньше похож на какой-нибудь питон, чем сам питон похож на перл/жаваскрипт/бейсик.

Если твоя задаче не сосредоточена на управлении файлами и программами, то действительно лучше взять другой язык.

~ не раскрывается в кавычках, а $HOME раскрывается, в man bash это описано.

legolegs ★★★★★
()
Последнее исправление: legolegs (всего исправлений: 1)
Ответ на: комментарий от fingolfin

совершенно неочевидный, очень капризный, везде какие-то подводные камни поджидают

Не верю глазам, неужели у кого-то здравый смысл возобладал над синдромом утенка.

Deleted
()
Ответ на: комментарий от fingolfin

~ - используй в интерактиве, ${HOME} - в скриптах. Всё предельно просто. Не надо тащить интерактивные плюшки в скрипты. И вообще, читаем ABS Guide.

IPR ★★★★★
()
Ответ на: комментарий от IPR

читаем ABS Guide

Вас не затруднит уточнить, что именно читать?
А то по «ABS Guide» у меня ТАКОЕ нагуглилось... Очень далеко от баша.

Borifed
()
Ответ на: комментарий от Deleted

Не верю глазам, неужели у кого-то здравый смысл возобладал над синдромом утенка.

Ну да, ну да. Можно подумать, что в каком-то языке в этом подлунном мире

variable=литералы с пробелами
или
variable="заэкранированные в строку конструкции типа вызов функции"
даст какой-то другой результат, а не как в bash: первое — синтаксический нонсенс и для второго — отсутствие специальных действий с присвоением всего как одной строки?

vodz ★★★★★
()
Ответ на: комментарий от vodz

variable=литералы с пробелами

$ cat Makefile
A=x y z

all:
	echo "$(A)"
$ make
echo "x y z"
x y z
$ 
Deleted
()
Ответ на: комментарий от Deleted

А это ничего, что вот именно ваши примеры взаимоисключающие? Первый выключает какие-либо действия до CR, а второй вообще имеет специальный смысл: установить переменные окружения только для последующей команды. Было бы странно, если бы вообще не было бы никакого эффекта в языке. Но в каждом языке это своё, и его ТСу всё равно придётся изучать, а не ныть.

vodz ★★★★★
()
Ответ на: комментарий от Deleted

Перечитай внимательно свой предыдущий комментарий.

Там всё написано правильно. Упрощение конкатенации по пробелам требует либо включения в синтаксис символа новой строки как специального, что для makefile вполне удобно, как наиболее востребованное, но вот уже желание получить специальную интерпретацию приводит к нагромождению всяких значков и трюков, похлеще чем в bash и еще и не стандартизованному.

vodz ★★★★★
()
Ответ на: комментарий от vodz

Там написано, что var=x y z:

  • можно подумать, что в каком-то языке в этом подлунном мире даст какой-то другой результат;
  • синтаксический нонсенс в bash.

Второе утверждение явным образом ложное, а в первом риторический вопрос скрывает за собой еще одно ложное утверждение.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

Нет тут ничего ложного. Невозможно получить оба результата, не в водя в синтаксис два разных обозначений. Что вы своими примерами вместе с ТС и продемонстрировали.

vodz ★★★★★
()
Ответ на: комментарий от vodz

Не знаю, что демонстрировал ТС, а я показал 2 примера реального синтаксиса, чтобы новички твоё ошибочное сообщение не приняли за правду.

Deleted
()
Ответ на: комментарий от Deleted

а я показал 2 примера реального синтаксиса

Опустив, что это два разных языка, и сделать один «хороший язык (bash)» совместив в один синтаксис - получится нонсенс.

vodz ★★★★★
()
Ответ на: комментарий от Deleted

Вы уже спорите ради спора, не вникая, судя по скорости ответов. В изначальном ответе (не вам) было сказано, что сделать лучший на этом свете язык, который без тонкостей синтаксиса мог конкатенировать строки одновременно исполняя как простую конкатенацию без интерпретирования спец символов синтаксиса (для большинства языков — это пробелелы) и одновременно делать спец постановки (у ТСа — это ~(user)/ ) — не возможно, по определению этого мира.

vodz ★★★★★
()
Ответ на: комментарий от vodz

Вы уже спорите ради спора, не вникая, судя по скорости ответов.

Вы судите неверно.

В изначальном ответе (не вам) было сказано, что сделать лучший на этом свете язык, который без тонкостей синтаксиса мог конкатенировать строки одновременно исполняя как простую конкатенацию без интерпретирования спец символов синтаксиса (для большинства языков — это пробелелы) и одновременно делать спец постановки (у ТСа — это ~(user)/ ) — не возможно, по определению этого мира.

Ок. Изначальный ответ как ни читай, а прочитать именно такой смысл у меня не получилось.

Deleted
()
Ответ на: комментарий от Deleted

Изначальный ответ как ни читай, а прочитать именно такой смысл у меня не получилось.

С этим я согласен, но я изначально не собирался расписывать целую лекцию, что тут в последствии получилось, а ответил простым коротким коментарием.

vodz ★★★★★
()
Ответ на: комментарий от fingolfin

bash в качестве скриптового языка по-моему та еще муть: совершенно неочевидный, очень капризный, везде какие-то подводные камни поджидают... Думаю другой язык выучить

Быоло бы неплохо, если бы больше людей это замечало.

anonymous
()
Ответ на: комментарий от anonymous

bash в качестве скриптового языка по-моему та еще муть: совершенно неочевидный, очень капризный, везде какие-то подводные камни поджидают... Думаю другой язык выучить

Быоло бы неплохо, если бы больше людей это замечало.

Патрик смотрит на вас с недоумением.

anc ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.