У меня есть следующий скрипт. Это простой тестовый случай, где a
любое строковое значение и b
предполагается, что это путь.
#!/bin/bash
alias jo "\
echo "please enter values "\
read a \
read -e b \
echo "My values are $a and $b""
Однако всякий раз, когда я пытаюсь выполнить ./sample.sh, я получаю следующие ошибки:
./sample.sh: line 3: alias: jo: not found
./sample.sh: line 3: alias: echo please: not found
./sample.sh: line 3: alias: enter: not found
./sample.sh: line 3: alias: values: not found
./sample.sh: line 3: alias: read a read -e b echo My: not found
./sample.sh: line 3: alias: values: not found
./sample.sh: line 3: alias: are: not found
./sample.sh: line 3: alias: and: not found
./sample.sh: line 3: alias: : not found
и когда я пытаюсь, source sample.sh
я получаю следующее:
a: Undefined variable.
Моя цель состояла в том, чтобы сделать это псевдонимом, чтобы я мог получить этот сценарий и просто запустить псевдоним для выполнения строки команд. Может кто-то посмотреть на это и сообщить мне, в чем ошибка?
command-line
bash
scripts
alias
Йовин Миранда
источник
источник
Ответы:
У вас есть пара вопросов здесь
в отличие от in
csh
, inbash
(и других оболочек типа Bourne), псевдонимам присваивается=
знак, напримерalias foo=bar
цитаты не могут быть такими же вложенными; в этом случае вы можете использовать одинарные кавычки вокруг псевдонима и двойные кавычки внутри
обратная косая черта
\
- это символ продолжения строки : синтаксически она превращает вашу команду в одну строку (противоположность того, что вы хотите)Так
Тестирование: сначала мы получаем исходный файл:
тогда
Если вы хотите использовать псевдоним внутри скрипта, помните, что псевдонимы включены по умолчанию только в интерактивных оболочках: чтобы включить их внутри скрипта, вам нужно будет добавить
Независимо от всего вышесказанного, вы должны рассмотреть возможность использования функции оболочки, а не псевдоним для таких вещей
источник
$a
и$b
будет расширен во время определения, не тогда , когда псевдоним выполняется.Привыкайте использовать функции в оболочке типа POSIX. У вас нет проблем с цитированием:
источник