Контрпример:
$ cat file.txt
hello;welt;
hello;world;
hell;welt;
$ cat xx.sh
grep "$1;$2" file.txt
$ bash -x xx.sh hello welt
+ grep 'hello;welt' file.txt
hello;welt;
$
Вы еще не классифицировали свою проблему точно.
Если вы пытаетесь присвоить результат grep переменной (как и я) твой пример ломается.
Пожалуйста, покажи, что ты имеешь в виду.Используя тот же файл данных, что и раньше, и выполняя задание, я получаю следующий вывод:
$ cat xx.sh
grep "$1;$2" file.txt
output=$(grep "$1;$2" file.txt)
echo "$output"
$ bash -x xx.sh hello welt
+ grep 'hello;welt' file.txt
hello;welt;
++ grep 'hello;welt' file.txt
+ output='hello;welt;'
+ echo 'hello;welt;'
hello;welt;
$
Кажется, это работает для меня.Это также демонстрирует, почему вопрос нуждается в явном, полном, выполнимом, минимальном примере, чтобы мы могли видеть, что делает спрашивающий, что отличается от того, что думают люди, отвечающие на вопрос.
Я вижуВы предоставили пример кода:
# find entry
$line=$(grep "$1;$2;" $PERMISSIONSFILE)
# splitt line
reads=$(echo $line | cut -d';' -f3)
writes=$(echo $line | cut -d';' -f4)
admins=$(echo $line | cut -d';' -f5)
Неверная строка $line=$(grep ...)
.Вы должны опустить $
до line
.Хотя это синтаксически правильно, это означает «присваивать переменной, имя которой хранится в $line
результат команды grep
».Это вряд ли то, что вы имели в виду.Это иногда полезно.Тем не менее, эти случаи редки и далеко, и только для людей, которые знают, что они делают, и которые могут точно документировать, что они делают.
В целях безопасности, если ничего больше, я бы также приложил $line
значений в двойных кавычках в строках echo
.Это может не быть строго необходимым, но это простое защитное программирование.
Изменения приводят к:
# find entry
line=$(grep "$1;$2;" $PERMISSIONSFILE)
# split line
reads=$( echo "$line" | cut -d';' -f3)
writes=$(echo "$line" | cut -d';' -f4)
admins=$(echo "$line" | cut -d';' -f5)
Остальная часть вашего сценария была в порядке.