shell, assigning value to variable from subscript
(using zsh with the following)
# i=for loop ((i;i<l,i++))
typeset -A _opts
AILABLE_ARG_OPTS=('v|verbose' 0 'd|destination' 1)
currentOpt=("${(@s/=/)${@[$i]##*-}}")
for k v in ${(kv)AVAILABLE_ARG_OPTS}; do
if (( $v != 0 )); then
_opts[${k#*|}]=$([[ -v currentOpt[2] ]] && #<---------- subscript
echo "${currentOpt[2]}" ||
echo "${@[$((++i))]}" # <---------------------------- HERE ?
)
fi
done
At 'HERE', $i using correct value but doesn't set increment for the loop.
- Did I miss something with the substitution ?
- Does the variable became readonly inner sub execution ?
edit add same style question..
_opts[${k#*|}]=${currentOpt[2]:-"${@[$((++i))]}"}
is it "normal" that the second statement is evaluate in all case ?
`$currentOpt[2]``setted or not
edit: (as comment answer)
_opts[${k#*|}]=$(
[[ -v currentOpt[2] ]] && #<---------- subscript
echo "${currentOpt[2]}" ||
echo "${@[$((++i))]}" # <--------------------- $i is not incremented
)
"~~equivalent~~" to (exept that increment..)
if [[ -v currentOpt[2] ]]; then
_opts[${k#*|}]="${currentOpt[2]}"
else
_opts[${k#*|}]="${@[$((++i))]}" # <-------- $i is incremented
fi
that the point I don't understand, in both case the right value is setted to _opts[$k]
.
But in the first exemple, $((++i))
don't assign it's value to$i
.. and i would know why
thanks for help
shell zsh
|
show 1 more comment
(using zsh with the following)
# i=for loop ((i;i<l,i++))
typeset -A _opts
AILABLE_ARG_OPTS=('v|verbose' 0 'd|destination' 1)
currentOpt=("${(@s/=/)${@[$i]##*-}}")
for k v in ${(kv)AVAILABLE_ARG_OPTS}; do
if (( $v != 0 )); then
_opts[${k#*|}]=$([[ -v currentOpt[2] ]] && #<---------- subscript
echo "${currentOpt[2]}" ||
echo "${@[$((++i))]}" # <---------------------------- HERE ?
)
fi
done
At 'HERE', $i using correct value but doesn't set increment for the loop.
- Did I miss something with the substitution ?
- Does the variable became readonly inner sub execution ?
edit add same style question..
_opts[${k#*|}]=${currentOpt[2]:-"${@[$((++i))]}"}
is it "normal" that the second statement is evaluate in all case ?
`$currentOpt[2]``setted or not
edit: (as comment answer)
_opts[${k#*|}]=$(
[[ -v currentOpt[2] ]] && #<---------- subscript
echo "${currentOpt[2]}" ||
echo "${@[$((++i))]}" # <--------------------- $i is not incremented
)
"~~equivalent~~" to (exept that increment..)
if [[ -v currentOpt[2] ]]; then
_opts[${k#*|}]="${currentOpt[2]}"
else
_opts[${k#*|}]="${@[$((++i))]}" # <-------- $i is incremented
fi
that the point I don't understand, in both case the right value is setted to _opts[$k]
.
But in the first exemple, $((++i))
don't assign it's value to$i
.. and i would know why
thanks for help
shell zsh
1
You have a||
on the preceding line, which means unless there is an error with theecho
command, the "HERE" line never executes.
– chepner
Nov 19 '18 at 13:13
thanks, but that ok with that, assume we talk of an case where $currentOpt[2] is not setted, hilight for code is wrong at the line above the first echo, regex parse as an comment but i assign =$(. I added more explain
– dim
Nov 19 '18 at 13:56
You're incrementingi
in a subshell created by the command substitution.i
in the current shell isn't affected.
– chepner
Nov 19 '18 at 14:03
so parent shell variable are readonly ? does have a way to "reference" them ?
– dim
Nov 19 '18 at 14:26
I guess that's one way of looking at it. More precisely, the child gets its own variable, initialized to the value of the parent's variable.
– chepner
Nov 19 '18 at 14:30
|
show 1 more comment
(using zsh with the following)
# i=for loop ((i;i<l,i++))
typeset -A _opts
AILABLE_ARG_OPTS=('v|verbose' 0 'd|destination' 1)
currentOpt=("${(@s/=/)${@[$i]##*-}}")
for k v in ${(kv)AVAILABLE_ARG_OPTS}; do
if (( $v != 0 )); then
_opts[${k#*|}]=$([[ -v currentOpt[2] ]] && #<---------- subscript
echo "${currentOpt[2]}" ||
echo "${@[$((++i))]}" # <---------------------------- HERE ?
)
fi
done
At 'HERE', $i using correct value but doesn't set increment for the loop.
- Did I miss something with the substitution ?
- Does the variable became readonly inner sub execution ?
edit add same style question..
_opts[${k#*|}]=${currentOpt[2]:-"${@[$((++i))]}"}
is it "normal" that the second statement is evaluate in all case ?
`$currentOpt[2]``setted or not
edit: (as comment answer)
_opts[${k#*|}]=$(
[[ -v currentOpt[2] ]] && #<---------- subscript
echo "${currentOpt[2]}" ||
echo "${@[$((++i))]}" # <--------------------- $i is not incremented
)
"~~equivalent~~" to (exept that increment..)
if [[ -v currentOpt[2] ]]; then
_opts[${k#*|}]="${currentOpt[2]}"
else
_opts[${k#*|}]="${@[$((++i))]}" # <-------- $i is incremented
fi
that the point I don't understand, in both case the right value is setted to _opts[$k]
.
But in the first exemple, $((++i))
don't assign it's value to$i
.. and i would know why
thanks for help
shell zsh
(using zsh with the following)
# i=for loop ((i;i<l,i++))
typeset -A _opts
AILABLE_ARG_OPTS=('v|verbose' 0 'd|destination' 1)
currentOpt=("${(@s/=/)${@[$i]##*-}}")
for k v in ${(kv)AVAILABLE_ARG_OPTS}; do
if (( $v != 0 )); then
_opts[${k#*|}]=$([[ -v currentOpt[2] ]] && #<---------- subscript
echo "${currentOpt[2]}" ||
echo "${@[$((++i))]}" # <---------------------------- HERE ?
)
fi
done
At 'HERE', $i using correct value but doesn't set increment for the loop.
- Did I miss something with the substitution ?
- Does the variable became readonly inner sub execution ?
edit add same style question..
_opts[${k#*|}]=${currentOpt[2]:-"${@[$((++i))]}"}
is it "normal" that the second statement is evaluate in all case ?
`$currentOpt[2]``setted or not
edit: (as comment answer)
_opts[${k#*|}]=$(
[[ -v currentOpt[2] ]] && #<---------- subscript
echo "${currentOpt[2]}" ||
echo "${@[$((++i))]}" # <--------------------- $i is not incremented
)
"~~equivalent~~" to (exept that increment..)
if [[ -v currentOpt[2] ]]; then
_opts[${k#*|}]="${currentOpt[2]}"
else
_opts[${k#*|}]="${@[$((++i))]}" # <-------- $i is incremented
fi
that the point I don't understand, in both case the right value is setted to _opts[$k]
.
But in the first exemple, $((++i))
don't assign it's value to$i
.. and i would know why
thanks for help
shell zsh
shell zsh
edited Nov 19 '18 at 22:38
miken32
23.5k84672
23.5k84672
asked Nov 19 '18 at 12:36
dim
11
11
1
You have a||
on the preceding line, which means unless there is an error with theecho
command, the "HERE" line never executes.
– chepner
Nov 19 '18 at 13:13
thanks, but that ok with that, assume we talk of an case where $currentOpt[2] is not setted, hilight for code is wrong at the line above the first echo, regex parse as an comment but i assign =$(. I added more explain
– dim
Nov 19 '18 at 13:56
You're incrementingi
in a subshell created by the command substitution.i
in the current shell isn't affected.
– chepner
Nov 19 '18 at 14:03
so parent shell variable are readonly ? does have a way to "reference" them ?
– dim
Nov 19 '18 at 14:26
I guess that's one way of looking at it. More precisely, the child gets its own variable, initialized to the value of the parent's variable.
– chepner
Nov 19 '18 at 14:30
|
show 1 more comment
1
You have a||
on the preceding line, which means unless there is an error with theecho
command, the "HERE" line never executes.
– chepner
Nov 19 '18 at 13:13
thanks, but that ok with that, assume we talk of an case where $currentOpt[2] is not setted, hilight for code is wrong at the line above the first echo, regex parse as an comment but i assign =$(. I added more explain
– dim
Nov 19 '18 at 13:56
You're incrementingi
in a subshell created by the command substitution.i
in the current shell isn't affected.
– chepner
Nov 19 '18 at 14:03
so parent shell variable are readonly ? does have a way to "reference" them ?
– dim
Nov 19 '18 at 14:26
I guess that's one way of looking at it. More precisely, the child gets its own variable, initialized to the value of the parent's variable.
– chepner
Nov 19 '18 at 14:30
1
1
You have a
||
on the preceding line, which means unless there is an error with the echo
command, the "HERE" line never executes.– chepner
Nov 19 '18 at 13:13
You have a
||
on the preceding line, which means unless there is an error with the echo
command, the "HERE" line never executes.– chepner
Nov 19 '18 at 13:13
thanks, but that ok with that, assume we talk of an case where $currentOpt[2] is not setted, hilight for code is wrong at the line above the first echo, regex parse as an comment but i assign =$(. I added more explain
– dim
Nov 19 '18 at 13:56
thanks, but that ok with that, assume we talk of an case where $currentOpt[2] is not setted, hilight for code is wrong at the line above the first echo, regex parse as an comment but i assign =$(. I added more explain
– dim
Nov 19 '18 at 13:56
You're incrementing
i
in a subshell created by the command substitution. i
in the current shell isn't affected.– chepner
Nov 19 '18 at 14:03
You're incrementing
i
in a subshell created by the command substitution. i
in the current shell isn't affected.– chepner
Nov 19 '18 at 14:03
so parent shell variable are readonly ? does have a way to "reference" them ?
– dim
Nov 19 '18 at 14:26
so parent shell variable are readonly ? does have a way to "reference" them ?
– dim
Nov 19 '18 at 14:26
I guess that's one way of looking at it. More precisely, the child gets its own variable, initialized to the value of the parent's variable.
– chepner
Nov 19 '18 at 14:30
I guess that's one way of looking at it. More precisely, the child gets its own variable, initialized to the value of the parent's variable.
– chepner
Nov 19 '18 at 14:30
|
show 1 more comment
active
oldest
votes
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%2f53374807%2fshell-assigning-value-to-variable-from-subscript%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
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.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- 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%2f53374807%2fshell-assigning-value-to-variable-from-subscript%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
1
You have a
||
on the preceding line, which means unless there is an error with theecho
command, the "HERE" line never executes.– chepner
Nov 19 '18 at 13:13
thanks, but that ok with that, assume we talk of an case where $currentOpt[2] is not setted, hilight for code is wrong at the line above the first echo, regex parse as an comment but i assign =$(. I added more explain
– dim
Nov 19 '18 at 13:56
You're incrementing
i
in a subshell created by the command substitution.i
in the current shell isn't affected.– chepner
Nov 19 '18 at 14:03
so parent shell variable are readonly ? does have a way to "reference" them ?
– dim
Nov 19 '18 at 14:26
I guess that's one way of looking at it. More precisely, the child gets its own variable, initialized to the value of the parent's variable.
– chepner
Nov 19 '18 at 14:30