Передача -e и -n в качестве позиционных параметров в Bash
Недавно я работал с позиционными параметрами в некоторых скриптах 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 ответ
-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 здесь документ
#!/bin/bash
cat<<EOF
$1
$2
$3
$4
$5
EOF