Как использовать пользовательскую переменную в команде для создания условия в if [дубликат]

printf '%s\n' conf{1..101} conf{2..272} |
xargs sh -c 'shift "$1"; printf "%s/distance.txt\n" "$@"' 2 1 > /path/to/folder.txt

Или,

printf '%s\n' conf{1..101}/distance.txt conf{2..272}/distance.txt |
xargs cat > /path/to/folder.txt
0
13.05.2017, 14:12
2 ответа
if [ ` ls -1 ~/$acl/sw-list-cisco > /dev/null | wc -l ` -gt 0 ];

Вы перенаправляете вывод ls в /dev/null, поэтому ничего не попадает в wc, и всегда печатается 0. То же самое, если вы попробуете это вручную: ls / >/dev/null | wc -l против ls / | wc -l.

Возможно, вы хотели вместо этого перенаправить errors из ls в /dev/null:

if [ $(ls ~/"$acl/sw-list-cisco" 2>/dev/null | wc -l) -gt 0 ];

(-1 is not требуется, когда вывод идет в канал.)

Но поскольку это всего лишь один файл, [ -f ~/"$acl/sw-list-cisco" ] сделает это проще, чем @Кусалананда уже ответил. Даже если вам нужно подсчитать количество файлов, может быть лучше расширить глобус до массива и подсчитать элементы.

1
28.01.2020, 02:16

Вам редко, если вообще когда-либо, нужно анализировать вывод ls .

В этом случае вы можете просто выполнить

if [ -f "$HOME/$acl/sw-list-cisco" ]; then

Я использую тест -f, чтобы проверить, существует ли данное имя и является ли оно именем обычного файла. Я использую $HOME, а не ~, поскольку ~ не ведет себя как переменная внутри кавычек$HOME ИМХО, гораздо информативнее).

4
28.01.2020, 02:16

Теги

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