LINUX.ORG.RU

\; \\; \\\; \\\\; и так далее

реально в bash нельзя экранировать !, приходится в одинарные " заключать.

Spoofing ★★★★★
()
Последнее исправление: Spoofing (всего исправлений: 1)
Ответ на: комментарий от alex-qwerty

нет времени объяснять. man bash

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

Любимый лорчик пересрал кавычки, но все же ясно, что " делает что-то ненужное. Например, мешает экранировать.

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

По ходу при склейке строк происходит исчезновение ";"

Ты можешь наконец-то привести пример, который у тебя не работает? Чтобы его вставить в командную строку и убедиться в этом? А рядом показать что хотелось бы получить на выходе?

Ибо у меня никакого исчезновения не происходит:

$ tmpvar1="bla-bla-bla" ; tmpvar1="$tmpvar1$ ; \\n" ; echo "$tmpvar1"
bla-bla-bla$ ; \n

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

tmpfile1=$(cat file.php) IFS=';' set — $tmpfile1

while [ '$1' ] ; do tmpvar1='$1;' echo $tmpvar1 shift done

file.php - любой файл php

c двойными кавычками - то же

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

1. Пожалуйста, оберни это в [code] [/code] . И вообще прочитай про LORCODE

2.

tmpfile1=$(cat file.php) IFS=';' set — $tmpfile1

Что это должно делать? Ты хочешь запустить php скрипт? Зачем тогда читать его в переменную?

3.
while [ '$1' ] ; do tmpvar1='$1;' echo $tmpvar1 shift done

У тебя бесконечный цикл. Ибо строка '$1' всегда true.
Ты хочешь что-то делать с параметрами скрипта? Тогда используй двойные кавычки: только там интерпретируются переменные. И никогда не используй [ ], всегда двойные [[ ]]. Кроме того, я не понимаю какое это имеет отношение к задаче в топике.

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

ЕМНИП это один из башизмов — во всяком случае не во всех шеллах эта конструкция реализована. Чтобы привязаться к 1 интерпретатору, очевидно же!

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

это ещё почему? двойные, например, не умеют -o

OR что ли?

$ A="a" ; B="b" ; [[ "$A" = "a" || "$B" = "a" ]] && echo "Yes"
Yes

$ A="a" ; B="b" ; [[ "$A" = "b" || "$B" = "a" ]] && echo "Yes"

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

И никогда не используй [ ], всегда двойные [[ ]].

это ещё почему? двойные, например, не умеют -o


-a и -o во-первых некороткозамкнутые так как [ имеет семантику команды, а не ключевого слова и во-вторых изначально не нужны т.к.

The binary -a and -o, and ( / ) (grouping) operators are XSI extensions to the POSIX standard. All are marked as obsolescent in POSIX-2008. They should not be used in new code. One of the practical problems with [ A = B -a C = D ] (or -o) is that POSIX does not specify the results of a test or [ command with more than 4 arguments. It probably works in most shells, but you can't count on it. If you have to write for POSIX shells, then you should use two test or [ commands separated by a && operator instead.

http://mywiki.wooledge.org/BashPitfalls#pf6
http://mywiki.wooledge.org/BashFAQ/031#np2

Так что всё верно, для bash использовать надо родной [[.

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

Ты даже не начал понимать, как работает оболочка. Ни touch 1, ни touch 2 не выводят ничего, соответственно оболочка выполняет [ -o ], что завершается с кодом 0, потому что, получив ровно один аргумент до ], [ в твоей оболочке проверяет, не пустой ли он.

set -x
[ $(touch /aba/caba1) -o $(touch /aba/caba2) ] && echo стыдно.

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