Во-первых, почему здесь $ 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
Вы выполнили командную строку, содержащую два специальных символа оболочки -:*
и >
. Вы видели, что сделал >
; *
— это подстановочный знак/символ подстановки, который подбирает каждый 1 файл в вашем текущем каталоге. У вас есть один файл с именем composer -setup.php в вашем текущем каталоге.
Процитируйте свою командную строку; одинарные -кавычки работают, если в вашем тексте нет одинарных -кавычек:
echo '2 * 3 > 5 is a valid inequality'
1 :каждый файл (или каталог, сокет и т. д. ), которые не начинаются с точки, если вы не установили параметр оболочки (, такой как dotglob ), специально включить точка -подстановку файлов.
Здесь происходят две вещи...
Во-первых, оболочка видит символ *
и заменяет его списком файлов в текущем каталоге. Это известно как «глоббинг»
Кроме того, > 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'
Параметр '...'
не позволяет оболочке интерпретировать специальные символы и отображает введенную вами строку.