Просто удалите обратные кавычки из вашего скрипта:
#!/bin/sh
ls -lrt >> lsOutput.log
В противном случае команда выполняется, а затем ее вывод заменяется и выполняется.
Например:
echo date
выведет: date
, а
`echo date`
выведет текущую дату, то есть сначала вычислится до date
, а затем выполнится, что вызывает программа дата
сама.
${#*[@]}
будет длиной массива $*
, также известного как $@
или $argv
, который является массивом позиционных параметров (в случае скрипта или функции, это аргументы скрипта или функции получил ). Хотя для этого лучше использовать $#
.
*
сам по себе является просто шаблоном шара. В контексте списка это расширяется до списка файлов в текущем каталоге, которые соответствуют этому шаблону. Поскольку *
является шаблоном, который соответствует любой строке, он будет расширяться на все имена файлов в текущем каталоге (, кроме скрытых ).
Теперь вам нужно найти контекст списка для этого *
для расширения, а затем каким-то образом подсчитать количество результирующих аргументов. Одним из способов может быть использование анонимной функции :
() {echo There are $# non hidden files in the current directory} *(N)
Вместо *
я использовал *(N)
, который является *
, но с подстановочным квалификаторомN
(для nullglob ), который делает так, что если шаблон *
не соответствует ни одному файлу, вместо того, чтобы сообщать об ошибке, он вообще ничего не расширяет.
Расширение *(N)
затем передается этой анонимной функции. Внутри этой анонимной функции этот список файлов доступен в массиве $@
/ $argv
, и мы получаем длину этого массива с $#
(, такую же, как $#argv
, $#@
, $#*
или даже неудобный синтаксис ksh вроде${#argv[@]}
).
files=(*)
printf 'There are %d files\n' "${#files[@]}"
или
set -- *
printf 'There are %d files\n' "$#"
Вы должны сначала назвать массив (, как я сделал выше с files
), или использовать построенный -в массиве $@
, заполнив его подстановочным знаком, как я сделал во втором примере. В первом "длина" (количество файлов )массива выполняется с помощью синтаксиса ${#arrayname[@]}
. Количество элементов в построенном -массиве находится в $#
.