Why does ${$#} return same result as $$ in dash?
While trying to get last positional parameter set in /bin/dash
, I've tried echo ${$#}
. Surprisingly this did not result in an error, but into PID which is the same as $$
variable contents. Question, is why did that syntax work ? What is the syntax rule that shell applied here ?
Basically, what I did is
$ set 1 2 3 4 5
$ echo ${$#}
13819
$ echo $$
13819
Apparently, %
character also get ignored in such construct
$ echo ${$%}
13819
But *
and @
result in bad substitution error:
$ echo ${$*}
sh: 10: Bad substitution
$ echo ${$@}
sh: 11: Bad substitution
shell
add a comment |
While trying to get last positional parameter set in /bin/dash
, I've tried echo ${$#}
. Surprisingly this did not result in an error, but into PID which is the same as $$
variable contents. Question, is why did that syntax work ? What is the syntax rule that shell applied here ?
Basically, what I did is
$ set 1 2 3 4 5
$ echo ${$#}
13819
$ echo $$
13819
Apparently, %
character also get ignored in such construct
$ echo ${$%}
13819
But *
and @
result in bad substitution error:
$ echo ${$*}
sh: 10: Bad substitution
$ echo ${$@}
sh: 11: Bad substitution
shell
What are you expecting${$*}
and${$@}
to produce?
– Kusalananda
1 min ago
add a comment |
While trying to get last positional parameter set in /bin/dash
, I've tried echo ${$#}
. Surprisingly this did not result in an error, but into PID which is the same as $$
variable contents. Question, is why did that syntax work ? What is the syntax rule that shell applied here ?
Basically, what I did is
$ set 1 2 3 4 5
$ echo ${$#}
13819
$ echo $$
13819
Apparently, %
character also get ignored in such construct
$ echo ${$%}
13819
But *
and @
result in bad substitution error:
$ echo ${$*}
sh: 10: Bad substitution
$ echo ${$@}
sh: 11: Bad substitution
shell
While trying to get last positional parameter set in /bin/dash
, I've tried echo ${$#}
. Surprisingly this did not result in an error, but into PID which is the same as $$
variable contents. Question, is why did that syntax work ? What is the syntax rule that shell applied here ?
Basically, what I did is
$ set 1 2 3 4 5
$ echo ${$#}
13819
$ echo $$
13819
Apparently, %
character also get ignored in such construct
$ echo ${$%}
13819
But *
and @
result in bad substitution error:
$ echo ${$*}
sh: 10: Bad substitution
$ echo ${$@}
sh: 11: Bad substitution
shell
shell
asked 14 mins ago
Sergiy KolodyazhnyySergiy Kolodyazhnyy
10.2k32660
10.2k32660
What are you expecting${$*}
and${$@}
to produce?
– Kusalananda
1 min ago
add a comment |
What are you expecting${$*}
and${$@}
to produce?
– Kusalananda
1 min ago
What are you expecting
${$*}
and ${$@}
to produce?– Kusalananda
1 min ago
What are you expecting
${$*}
and ${$@}
to produce?– Kusalananda
1 min ago
add a comment |
1 Answer
1
active
oldest
votes
This is $$
with an empty prefix removed:
${parameter#[word]}
Remove Smallest Prefix Pattern. The word shall be expanded to produce a pattern. The parameter expansion shall then result in parameter, with the smallest portion of the prefix matched by the pattern deleted. If present, word shall not begin with an unquoted
#
.
The same applies for %
(suffix). @
and *
are not parameter expansion modifiers, so they are errors. It would happen for $?
or a hypothetical $=
as well.
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "106"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f500330%2fwhy-does-return-same-result-as-in-dash%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
This is $$
with an empty prefix removed:
${parameter#[word]}
Remove Smallest Prefix Pattern. The word shall be expanded to produce a pattern. The parameter expansion shall then result in parameter, with the smallest portion of the prefix matched by the pattern deleted. If present, word shall not begin with an unquoted
#
.
The same applies for %
(suffix). @
and *
are not parameter expansion modifiers, so they are errors. It would happen for $?
or a hypothetical $=
as well.
add a comment |
This is $$
with an empty prefix removed:
${parameter#[word]}
Remove Smallest Prefix Pattern. The word shall be expanded to produce a pattern. The parameter expansion shall then result in parameter, with the smallest portion of the prefix matched by the pattern deleted. If present, word shall not begin with an unquoted
#
.
The same applies for %
(suffix). @
and *
are not parameter expansion modifiers, so they are errors. It would happen for $?
or a hypothetical $=
as well.
add a comment |
This is $$
with an empty prefix removed:
${parameter#[word]}
Remove Smallest Prefix Pattern. The word shall be expanded to produce a pattern. The parameter expansion shall then result in parameter, with the smallest portion of the prefix matched by the pattern deleted. If present, word shall not begin with an unquoted
#
.
The same applies for %
(suffix). @
and *
are not parameter expansion modifiers, so they are errors. It would happen for $?
or a hypothetical $=
as well.
This is $$
with an empty prefix removed:
${parameter#[word]}
Remove Smallest Prefix Pattern. The word shall be expanded to produce a pattern. The parameter expansion shall then result in parameter, with the smallest portion of the prefix matched by the pattern deleted. If present, word shall not begin with an unquoted
#
.
The same applies for %
(suffix). @
and *
are not parameter expansion modifiers, so they are errors. It would happen for $?
or a hypothetical $=
as well.
answered 4 mins ago
Michael HomerMichael Homer
48.3k8127167
48.3k8127167
add a comment |
add a comment |
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f500330%2fwhy-does-return-same-result-as-in-dash%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
What are you expecting
${$*}
and${$@}
to produce?– Kusalananda
1 min ago