Эхоперация включает в себя некоторый отрывок текста, который не должен включать

Во-первых, почему здесь $ 1 (первый аргумент)? Во-вторых, echo lst просто напишет lst , а не содержимое Переменная. Предположительно вы хотите echo $ lst .

Поскольку вы используете bash (1) , присваивание с круглыми скобками создает массив без индекса, который оценивает его первый элемент:

lst=(1 2 3)
echo $lst       # prints 1
echo ${lst[0]}  # prints 1
echo ${lst[1]}  # prints 2
echo ${lst[*]}  # prints 1 2 3
0
08.12.2018, 19:33
2 ответа

Вы выполнили командную строку, содержащую два специальных символа оболочки -:*и >. Вы видели, что сделал >; *— это подстановочный знак/символ подстановки, который подбирает каждый 1 файл в вашем текущем каталоге. У вас есть один файл с именем composer -setup.php в вашем текущем каталоге.

Процитируйте свою командную строку; одинарные -кавычки работают, если в вашем тексте нет одинарных -кавычек:

echo '2 * 3 > 5 is a valid inequality'

1 :каждый файл (или каталог, сокет и т. д. ), которые не начинаются с точки, если вы не установили параметр оболочки (, такой как dotglob ), специально включить точка -подстановку файлов.

4
28.01.2020, 02:13

Здесь происходят две вещи...

Во-первых, оболочка видит символ *и заменяет его списком файлов в текущем каталоге. Это известно как «глоббинг»

.

Кроме того, > 5рассматривается как команда перенаправления.

так

echo 2 * 3 > 5 is a valid inequality 

Анализируется как

echo 2 * 3 is a valid inequality > 5

В результате создается файл с именем «5» с содержимым «2 список текущих файлов 3 является допустимым неравенством».

Чтобы этого не произошло, нужно использовать кавычки

echo '2 * 3 > 5 is a valid inequality'

Параметр '...'не позволяет оболочке интерпретировать специальные символы и отображает введенную вами строку.

4
28.01.2020, 02:13

Теги

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