Печать звездочки (*) в оболочке bash

a=5
echo "*/$aMin * * * * bash /etc/init.d/ckDskCheck.sh"

Когда я пытаюсь запустить следующий код, он отображается правильно */5 * * * * bash/etc/init.d/ckDskCheck.sh

Но когда я пытаюсь назначить результат с помощью следующего кода переменной и распечатать его, он будет отображаться как

a=5
cronSen=`echo "*/$a * * * * bash /etc/init.d/ckDskCheck.sh"`
echo $cronSen

Результат: enter image description here

Итак, я пытаюсь избежать звездочки

cronSen=`echo "\*/$a \* \* \* \* bash /etc/init.d/ckDskCheck.sh"`

Но он все еще не работает

Любая помощь будет принята с благодарностью, спасибо за помощь

Ответ 1

У вас есть две проблемы:

  • Бесполезное использование эха в Backticks

  • Всегда указывайте, что вы echo

Таким образом, фиксированный код

a=5
cronSen="*/$a * * * * bash /etc/init.d/ckDskCheck.sh"
echo "$cronSen"

Похоже, вы также можете использовать бесполезное использование переменной, но, возможно, cronSen полезно в более широком контексте.

Короче говоря, укажите все, где вам не требуется, чтобы оболочка выполняла разделение токенов и расширение подстановочных знаков.

Разделение токена,

 words="foo bar baz"
 for word in $words; do
      :

(Этот цикл три раза. Цитирование $words будет только циклически проходить по литеральному токену foo bar baz.)

Расширение подстановочных знаков:

pattern='file*.txt'
ls $pattern

(Quoting $pattern попытается перечислить один файл, имя которого буквально file*.txt.)

В более конкретных терминах обычно должно быть указано все, содержащее имя файла.

Изменена переменная, содержащая список токенов для циклического перехода или подстановочный знак для расширения, поэтому мы иногда сокращаем "процитировать все, если вы точно не знаете, что делаете".

Ответ 2

Вы должны использовать двойную кавычку, когда эхо ваша переменная:

echo "$cronSen"

Если вы не используете двойную кавычку, bash увидит * и выполнит расширение имени файла. * расширяется до всех файлов в вашем текущем каталоге.