Как манипулировать & специальным символом в оболочке - PullRequest
0 голосов
/ 21 января 2019

Я хочу манипулировать URL в сценарии оболочки.Мне нужно вырезать URL с помощью разделителя & и получить соответствующую строку.

Я попытался example="$(cut -d'&' -f2- <<< $1)", но когда я выполняю этот код и пытаюсь echo $example, он хочет выполнить$example содержание.

Кто-нибудь может мне помочь?

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Возможно, вам просто нужно заключить переменные в кавычки.

Сценарий проблемы:

#!/bin/bash
example="$(cut -d'&' -f2- <<< $1)"
echo $example

Если вы выполните его через Shellcheck , вы получите это в выводе:

example="$(cut -d'&' -f2- <<< $1)"
                              ^-- SC2086: Double quote to prevent globbing and word splitting.
echo $example
     ^-- SC2086: Double quote to prevent globbing and word splitting.

Исправлен скрипт:

#!/bin/bash
example="$(cut -d'&' -f2- <<< "$1")"
echo "$example"
0 голосов
/ 21 января 2019

Нет, это не так.

Когда вы делаете:

example="$(cut -d'&' -f2- <<< $1)"

пытается выполнить cut. В качестве теста:

ljm@verlaine[~]$ a='1&ls&3&4'
ljm@verlaine[~]$ example="$(cut -d'&' -f2- <<< $a)"
ljm@verlaine[~]$ echo $example
ls&3&4
ljm@verlaine[~]$ 

И, хотя цитирование, как предлагал iBug, является хорошей идеей и лучшей практикой, здесь это не обязательно.

...