Сценарий оболочки Linux «Нет такого файла или каталога»

Я создал сценарий оболочки для выполнения трех простых задач (заархивировать каталог, переименовать окончательный файл и удалить исходный каталог). Источник сценария ниже:

#!/bin/bash
if [[ $2 == *"/data/"* ]]
then
    src= $2"/*";
    dest= $1".zip";

    # Just for test
    echo $src;

    # Commented for now
    #zip -r -j $dest $src
    #mv $dest $1
    #rm -rf $2
else
    echo "Invalid arguments";
fi

Когда я запускаю приведенный выше сценарий с этими параметрами, у меня возникает ошибка:

./scriptzip.sh /data/file-new /data/file-old

./scriptzip.sh: line 4: /data/file-old/*: No such file or directory
./scriptzip.sh: line 5: /data/file-new.zip: No such file or directory

Как можно запретить оболочке проверять переменную на предмет строки «как каталог»? Есть ли способ пропустить это?

2
задан 17 August 2016 в 16:53
1 ответ

Пространство в оболочке значимо, так как именно оно разделяет маркеры в таких командах, как echo foo bar или еще хуже rm -rf /some/where /. Следовательно, назначение не должно включать пробелы вокруг =:

foo=/etc/*
echo $foo

Переменные также могут нуждаться в кавычках, в зависимости от того, что именно вы хотите, чтобы здесь произошло расширение глобуса, а также разбиение на слова (неправильное разбиение на rm может привести к неожиданной (и уморительной) чистке файловой системы).

echo "$foo"
7
ответ дан 3 December 2019 в 09:03

Теги

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