Using local parameter with the same name of a special one within a function
As I like to use descriptive parameter names, I often tried to use variable names already used by Zsh itself.
As it took me into trouble in the past, I now wrap my script in a main function named after the script. Then I declare all my local parameter using the local
keyword.
But some parameters seems to not allow hiding them in the local scope:
function foo
{
local commands=(bar baz)
local status=0
echo ${(F)commands}
echo $status
}
Here, the local commands
parameter is used in place of the special one.
But as the status
parameter is read-only, I got the following error:
zdm:6: read-only variable: status
I think that the local
keyword allow to use a special parameter in a local scope but it does not change the way it was declared.
parameters zsh
add a comment |
As I like to use descriptive parameter names, I often tried to use variable names already used by Zsh itself.
As it took me into trouble in the past, I now wrap my script in a main function named after the script. Then I declare all my local parameter using the local
keyword.
But some parameters seems to not allow hiding them in the local scope:
function foo
{
local commands=(bar baz)
local status=0
echo ${(F)commands}
echo $status
}
Here, the local commands
parameter is used in place of the special one.
But as the status
parameter is read-only, I got the following error:
zdm:6: read-only variable: status
I think that the local
keyword allow to use a special parameter in a local scope but it does not change the way it was declared.
parameters zsh
add a comment |
As I like to use descriptive parameter names, I often tried to use variable names already used by Zsh itself.
As it took me into trouble in the past, I now wrap my script in a main function named after the script. Then I declare all my local parameter using the local
keyword.
But some parameters seems to not allow hiding them in the local scope:
function foo
{
local commands=(bar baz)
local status=0
echo ${(F)commands}
echo $status
}
Here, the local commands
parameter is used in place of the special one.
But as the status
parameter is read-only, I got the following error:
zdm:6: read-only variable: status
I think that the local
keyword allow to use a special parameter in a local scope but it does not change the way it was declared.
parameters zsh
As I like to use descriptive parameter names, I often tried to use variable names already used by Zsh itself.
As it took me into trouble in the past, I now wrap my script in a main function named after the script. Then I declare all my local parameter using the local
keyword.
But some parameters seems to not allow hiding them in the local scope:
function foo
{
local commands=(bar baz)
local status=0
echo ${(F)commands}
echo $status
}
Here, the local commands
parameter is used in place of the special one.
But as the status
parameter is read-only, I got the following error:
zdm:6: read-only variable: status
I think that the local
keyword allow to use a special parameter in a local scope but it does not change the way it was declared.
parameters zsh
parameters zsh
asked Jan 1 at 23:57
Damien FlamentDamien Flament
515721
515721
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
To use a special parameter name within a local scope, you have to hide it explicitly using the -h
flag of the typeset
builtin:
typeset -h status
As you want to declare it as local, use the local
keyword which also supports that flag:
local -h status
You can also use the private
keyword from the zsh/param/private
module:
zmodload zsh/param/private
private -h status
The -h
flag
From the Zsh manual:
-h
Hide: only useful for special parameters (those marked
<S>
in the table in Parameters Set By The Shell), and for local parameters with the same name as a special parameter, though harmless for others.
A special parameter with this attribute will not retain its special effect when made local. Thus after
typeset -h PATH
, a function containingtypeset PATH
will create an ordinary local parameter without the usual behaviour of PATH.
Alternatively, the local parameter may itself be given this attribute; hence inside a function
typeset -h PATH
creates an ordinary local parameter and the special PATH parameter is not altered in any way.
It is also possible to create a local parameter using
typeset +h special
, where the local copy of special will retain its special properties regardless of having the -h attribute.
Global special parameters loaded from shell modules (currently those in zsh/mapfile and zsh/parameter) are automatically given the
-h
attribute to avoid name clashes.
Local parameters
For a more understandable explanation, see the Zsh manual page about the local parameters.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
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: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
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%2fstackoverflow.com%2fquestions%2f53999874%2fusing-local-parameter-with-the-same-name-of-a-special-one-within-a-function%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
To use a special parameter name within a local scope, you have to hide it explicitly using the -h
flag of the typeset
builtin:
typeset -h status
As you want to declare it as local, use the local
keyword which also supports that flag:
local -h status
You can also use the private
keyword from the zsh/param/private
module:
zmodload zsh/param/private
private -h status
The -h
flag
From the Zsh manual:
-h
Hide: only useful for special parameters (those marked
<S>
in the table in Parameters Set By The Shell), and for local parameters with the same name as a special parameter, though harmless for others.
A special parameter with this attribute will not retain its special effect when made local. Thus after
typeset -h PATH
, a function containingtypeset PATH
will create an ordinary local parameter without the usual behaviour of PATH.
Alternatively, the local parameter may itself be given this attribute; hence inside a function
typeset -h PATH
creates an ordinary local parameter and the special PATH parameter is not altered in any way.
It is also possible to create a local parameter using
typeset +h special
, where the local copy of special will retain its special properties regardless of having the -h attribute.
Global special parameters loaded from shell modules (currently those in zsh/mapfile and zsh/parameter) are automatically given the
-h
attribute to avoid name clashes.
Local parameters
For a more understandable explanation, see the Zsh manual page about the local parameters.
add a comment |
To use a special parameter name within a local scope, you have to hide it explicitly using the -h
flag of the typeset
builtin:
typeset -h status
As you want to declare it as local, use the local
keyword which also supports that flag:
local -h status
You can also use the private
keyword from the zsh/param/private
module:
zmodload zsh/param/private
private -h status
The -h
flag
From the Zsh manual:
-h
Hide: only useful for special parameters (those marked
<S>
in the table in Parameters Set By The Shell), and for local parameters with the same name as a special parameter, though harmless for others.
A special parameter with this attribute will not retain its special effect when made local. Thus after
typeset -h PATH
, a function containingtypeset PATH
will create an ordinary local parameter without the usual behaviour of PATH.
Alternatively, the local parameter may itself be given this attribute; hence inside a function
typeset -h PATH
creates an ordinary local parameter and the special PATH parameter is not altered in any way.
It is also possible to create a local parameter using
typeset +h special
, where the local copy of special will retain its special properties regardless of having the -h attribute.
Global special parameters loaded from shell modules (currently those in zsh/mapfile and zsh/parameter) are automatically given the
-h
attribute to avoid name clashes.
Local parameters
For a more understandable explanation, see the Zsh manual page about the local parameters.
add a comment |
To use a special parameter name within a local scope, you have to hide it explicitly using the -h
flag of the typeset
builtin:
typeset -h status
As you want to declare it as local, use the local
keyword which also supports that flag:
local -h status
You can also use the private
keyword from the zsh/param/private
module:
zmodload zsh/param/private
private -h status
The -h
flag
From the Zsh manual:
-h
Hide: only useful for special parameters (those marked
<S>
in the table in Parameters Set By The Shell), and for local parameters with the same name as a special parameter, though harmless for others.
A special parameter with this attribute will not retain its special effect when made local. Thus after
typeset -h PATH
, a function containingtypeset PATH
will create an ordinary local parameter without the usual behaviour of PATH.
Alternatively, the local parameter may itself be given this attribute; hence inside a function
typeset -h PATH
creates an ordinary local parameter and the special PATH parameter is not altered in any way.
It is also possible to create a local parameter using
typeset +h special
, where the local copy of special will retain its special properties regardless of having the -h attribute.
Global special parameters loaded from shell modules (currently those in zsh/mapfile and zsh/parameter) are automatically given the
-h
attribute to avoid name clashes.
Local parameters
For a more understandable explanation, see the Zsh manual page about the local parameters.
To use a special parameter name within a local scope, you have to hide it explicitly using the -h
flag of the typeset
builtin:
typeset -h status
As you want to declare it as local, use the local
keyword which also supports that flag:
local -h status
You can also use the private
keyword from the zsh/param/private
module:
zmodload zsh/param/private
private -h status
The -h
flag
From the Zsh manual:
-h
Hide: only useful for special parameters (those marked
<S>
in the table in Parameters Set By The Shell), and for local parameters with the same name as a special parameter, though harmless for others.
A special parameter with this attribute will not retain its special effect when made local. Thus after
typeset -h PATH
, a function containingtypeset PATH
will create an ordinary local parameter without the usual behaviour of PATH.
Alternatively, the local parameter may itself be given this attribute; hence inside a function
typeset -h PATH
creates an ordinary local parameter and the special PATH parameter is not altered in any way.
It is also possible to create a local parameter using
typeset +h special
, where the local copy of special will retain its special properties regardless of having the -h attribute.
Global special parameters loaded from shell modules (currently those in zsh/mapfile and zsh/parameter) are automatically given the
-h
attribute to avoid name clashes.
Local parameters
For a more understandable explanation, see the Zsh manual page about the local parameters.
answered Jan 2 at 0:11
Damien FlamentDamien Flament
515721
515721
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- 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%2fstackoverflow.com%2fquestions%2f53999874%2fusing-local-parameter-with-the-same-name-of-a-special-one-within-a-function%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