Передача -e и -n в качестве позиционных параметров в Bash - PullRequest
0 голосов
/ 22 сентября 2018

Недавно я работал с позиционными параметрами в некоторых скриптах bash и заметил, что -e и -n не передаются в качестве позиционных параметров.Я искал документацию, но не смог понять, почему.Рассмотрим следующие короткие сценарии:

#!/bin/bash
# test.sh
echo $@
echo $1
echo $2
echo $3
echo $4
echo $5
exit

Выполнение команды: # ./test.sh -e -f -c -n -g выводит:

-f -c -n -g

-f
-c
-g

. / Test.sh -n -f -c -e -g выводит:

-f -c -e -g-f
-c

-g

Почему -e и -n не отображаются в "$ @"?-e, кажется, передается как пустой параметр, а -n, чтобы удалить следующую конечную строку.Кроме того, я заметил, что эти параметры учитываются при отображении $ #.Кто-нибудь знает, почему -e и -n ведут себя не так, как другие параметры?

1 Ответ

0 голосов
/ 22 сентября 2018

-e передается как аргумент echo и затем используется им.

Попробуйте вместо этого:

#!/bin/bash
printf '%s\n' "$1"
printf '%s\n' "$2"
printf '%s\n' "$3"
printf '%s\n' "$4"
printf '%s\n' "$5"

Вывод:

-e
-f
-c
-n
-g

Проверка help echo | less +/-e

Вы можете использовать:

echo -- "$1"

тоже

Другое решение

с использованием bash здесь document

#!/bin/bash
cat<<EOF
$1
$2
$3
$4
$5
EOF
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...