#linux #shell #sh #command-line-arguments
#linux #оболочка #sh #аргументы командной строки
Вопрос:
У меня есть следующий сценарий оболочки, в котором я просто хочу распечатать первый аргумент по мере его передачи
Код:
#!/bin/bash
if [ "$1" == "" ]; then
exit 1
fi
echo $1
Допустим, имя скрипта testarg.sh
называется следующим образом — testarg.sh abc
. Отлично!
Приведенный выше сценарий оболочки работает, если я передаю простые аргументы, такие как «abc» или «xyz123». И, вызывая его, как testarg.sh xyz123
выводит «xyz123». Все хорошо!
Проблема:
Но if точно выводит содержимое, если я передаю сложную строку со специальными символами. Допустим, я назвал это так, как показано ниже:
./testarg.sh $6$nB3/jwAqgRcS9LN7$8c5InVbk5SLFiwuz9Xm6EHHRuZHMI0ggMhmxJ7Pr7NuBZ0TXtProuZ6LpQ6ZrFySly12cbGmWHsFpukEKAzdW.
Вопрос:
В приведенном выше вызове я хочу передать $6$nB3/jwAqgRcS9LN7$8c5InVbk5SLFiwuz9Xm6EHHRuZHMI0ggMhmxJ7Pr7NuBZ0TXtProuZ6LpQ6ZrFySly12cbGmWHsFpukEKAzdW.
в качестве аргумента и распечатать его точно таким, какой он есть, включая косую черту и точки. Нужно ли применять специальные приемы?
Я не хочу, чтобы пользователь моего скрипта утруждал себя вставкой специальных escape-символов для косых черт. Есть ли способ, которым я могу хорошо обработать это в своем скрипте и получить значение $1
as, чтобы точно его распечатать?
Ответ №1:
Вам нужно вызвать скрипт с одинарными кавычками вокруг аргумента. Невозможно заставить это работать, изменив код сценария.
./testarg.sh '$6$nB3/jwAqgRcS9LN7$8c5InVbk5SLFiwuz9Xm6EHHRuZHMI0ggMhmxJ7Pr7NuBZ0TXtProuZ6LpQ6ZrFySly12cbGmWHsFpukEKAzdW.'