Это из-за вывода wc -l / filename
, это будет вывод, например:
5 /filename
, но вы выполняете целочисленное сравнение (оператор: -ge
), следовательно, посторонняя часть / filename
недопустима, что приводит к сообщению об ошибке.
Просто передайте имя файла в wc
через STDIN, чтобы wc
просто возвращал счетчик:
[[ $(wc -l </disk1/environment.sh) -ge 0 ]]
Во втором случае [[$ (wc -l / disk1 / environment.sh)> 0]]
, вы просто проверяете, сортируется ли вывод подстановки команды, $ (wc -l /disk1/environment.sh)
после 0
, лексикографически; что всегда будет иметь место, если wc
не вернет некоторую ошибку и ничего не выдаст на STDOUT.
Обратите внимание: [
не поддерживает арифметические операторы, такие как >
, > =
, <
, < =
, вам понадобится ключевое слово ((
для них:
(( $(wc -l </disk1/environment.sh) > 0 ))
Предполагая, что ваш /bin/ls
из относительно свежей версии coreutils, вы можете использовать опцию --time-style
, чтобы указать пустой стиль. Например:
ls -Alhr --time-style=+""
Вы получите тот же вывод san даты и времени.