can bash show one array item id and value using `declare -p`?
$ str="a'"b"
$ declare -p str
declare -- str="a'"b" # see " was escaped, possibly other chars will too
$ astr=("$str" "c")
$ declare -p astr
declare -ax astr='([0]="a'''"b" [1]="c")'
so, is there some way to do something like declare -p astr[0]
and retrieve something like this: declare -- astr[0]="a'"b"
?
I could use sed
or something else, but I would like to know if bash allow accessing astr[n] thru declare -p
in some way I couldn't guess yet?
bash array
add a comment |
$ str="a'"b"
$ declare -p str
declare -- str="a'"b" # see " was escaped, possibly other chars will too
$ astr=("$str" "c")
$ declare -p astr
declare -ax astr='([0]="a'''"b" [1]="c")'
so, is there some way to do something like declare -p astr[0]
and retrieve something like this: declare -- astr[0]="a'"b"
?
I could use sed
or something else, but I would like to know if bash allow accessing astr[n] thru declare -p
in some way I couldn't guess yet?
bash array
add a comment |
$ str="a'"b"
$ declare -p str
declare -- str="a'"b" # see " was escaped, possibly other chars will too
$ astr=("$str" "c")
$ declare -p astr
declare -ax astr='([0]="a'''"b" [1]="c")'
so, is there some way to do something like declare -p astr[0]
and retrieve something like this: declare -- astr[0]="a'"b"
?
I could use sed
or something else, but I would like to know if bash allow accessing astr[n] thru declare -p
in some way I couldn't guess yet?
bash array
$ str="a'"b"
$ declare -p str
declare -- str="a'"b" # see " was escaped, possibly other chars will too
$ astr=("$str" "c")
$ declare -p astr
declare -ax astr='([0]="a'''"b" [1]="c")'
so, is there some way to do something like declare -p astr[0]
and retrieve something like this: declare -- astr[0]="a'"b"
?
I could use sed
or something else, but I would like to know if bash allow accessing astr[n] thru declare -p
in some way I couldn't guess yet?
bash array
bash array
asked yesterday
Aquarius PowerAquarius Power
1,67232036
1,67232036
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
If you are just looking for a way of displaying the data with escaped special characters, then the %q
format string of printf
in bash
would do that for you:
printf '%qn' "${astr[0]}"
To replicate the declare -p
-like output that you suggest:
printf 'declare -- astr[0]="%q"n' "${astr[0]}"
This is from the bash
manual, regarding the %q
format string of printf
:
%q
causes
printf
to output the corresponding argument in a format that can be reused
as shell input.
it is a lot simpler than using sed and does the same thing I was looking for, thx!
– Aquarius Power
yesterday
add a comment |
With bash v4.4 you can use the @A
parameter expansion operator to get similar results, but not effectively for a single array element:
A
The expansion is a string in the form of an assignment statement or declare command that, if evaluated, will recreate parameter with its attributes and value.
$ str="a'"b"
$ astr=("$str" "c")
$ echo ${astr[0]@A}
declare -a astr='a'''"b'
$ echo ${astr[@]@A}
declare -a astr=([0]="a'"b" [1]="c")
Or similar to the %q
printf format you can use the @Q
operator:
$ echo ${astr[0]@Q}
'a'''"b'
$ echo "declare -- astr[0]=${astr[0]@Q}"
declare -- astr[0]='a'''"b'
1
a new feature, interesting! mine is v4.3.48, I am almost installing 18.04 (16.04 here), I will check then :)
– Aquarius Power
yesterday
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%2f494175%2fcan-bash-show-one-array-item-id-and-value-using-declare-p%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
If you are just looking for a way of displaying the data with escaped special characters, then the %q
format string of printf
in bash
would do that for you:
printf '%qn' "${astr[0]}"
To replicate the declare -p
-like output that you suggest:
printf 'declare -- astr[0]="%q"n' "${astr[0]}"
This is from the bash
manual, regarding the %q
format string of printf
:
%q
causes
printf
to output the corresponding argument in a format that can be reused
as shell input.
it is a lot simpler than using sed and does the same thing I was looking for, thx!
– Aquarius Power
yesterday
add a comment |
If you are just looking for a way of displaying the data with escaped special characters, then the %q
format string of printf
in bash
would do that for you:
printf '%qn' "${astr[0]}"
To replicate the declare -p
-like output that you suggest:
printf 'declare -- astr[0]="%q"n' "${astr[0]}"
This is from the bash
manual, regarding the %q
format string of printf
:
%q
causes
printf
to output the corresponding argument in a format that can be reused
as shell input.
it is a lot simpler than using sed and does the same thing I was looking for, thx!
– Aquarius Power
yesterday
add a comment |
If you are just looking for a way of displaying the data with escaped special characters, then the %q
format string of printf
in bash
would do that for you:
printf '%qn' "${astr[0]}"
To replicate the declare -p
-like output that you suggest:
printf 'declare -- astr[0]="%q"n' "${astr[0]}"
This is from the bash
manual, regarding the %q
format string of printf
:
%q
causes
printf
to output the corresponding argument in a format that can be reused
as shell input.
If you are just looking for a way of displaying the data with escaped special characters, then the %q
format string of printf
in bash
would do that for you:
printf '%qn' "${astr[0]}"
To replicate the declare -p
-like output that you suggest:
printf 'declare -- astr[0]="%q"n' "${astr[0]}"
This is from the bash
manual, regarding the %q
format string of printf
:
%q
causes
printf
to output the corresponding argument in a format that can be reused
as shell input.
edited yesterday
answered yesterday
KusalanandaKusalananda
124k16233384
124k16233384
it is a lot simpler than using sed and does the same thing I was looking for, thx!
– Aquarius Power
yesterday
add a comment |
it is a lot simpler than using sed and does the same thing I was looking for, thx!
– Aquarius Power
yesterday
it is a lot simpler than using sed and does the same thing I was looking for, thx!
– Aquarius Power
yesterday
it is a lot simpler than using sed and does the same thing I was looking for, thx!
– Aquarius Power
yesterday
add a comment |
With bash v4.4 you can use the @A
parameter expansion operator to get similar results, but not effectively for a single array element:
A
The expansion is a string in the form of an assignment statement or declare command that, if evaluated, will recreate parameter with its attributes and value.
$ str="a'"b"
$ astr=("$str" "c")
$ echo ${astr[0]@A}
declare -a astr='a'''"b'
$ echo ${astr[@]@A}
declare -a astr=([0]="a'"b" [1]="c")
Or similar to the %q
printf format you can use the @Q
operator:
$ echo ${astr[0]@Q}
'a'''"b'
$ echo "declare -- astr[0]=${astr[0]@Q}"
declare -- astr[0]='a'''"b'
1
a new feature, interesting! mine is v4.3.48, I am almost installing 18.04 (16.04 here), I will check then :)
– Aquarius Power
yesterday
add a comment |
With bash v4.4 you can use the @A
parameter expansion operator to get similar results, but not effectively for a single array element:
A
The expansion is a string in the form of an assignment statement or declare command that, if evaluated, will recreate parameter with its attributes and value.
$ str="a'"b"
$ astr=("$str" "c")
$ echo ${astr[0]@A}
declare -a astr='a'''"b'
$ echo ${astr[@]@A}
declare -a astr=([0]="a'"b" [1]="c")
Or similar to the %q
printf format you can use the @Q
operator:
$ echo ${astr[0]@Q}
'a'''"b'
$ echo "declare -- astr[0]=${astr[0]@Q}"
declare -- astr[0]='a'''"b'
1
a new feature, interesting! mine is v4.3.48, I am almost installing 18.04 (16.04 here), I will check then :)
– Aquarius Power
yesterday
add a comment |
With bash v4.4 you can use the @A
parameter expansion operator to get similar results, but not effectively for a single array element:
A
The expansion is a string in the form of an assignment statement or declare command that, if evaluated, will recreate parameter with its attributes and value.
$ str="a'"b"
$ astr=("$str" "c")
$ echo ${astr[0]@A}
declare -a astr='a'''"b'
$ echo ${astr[@]@A}
declare -a astr=([0]="a'"b" [1]="c")
Or similar to the %q
printf format you can use the @Q
operator:
$ echo ${astr[0]@Q}
'a'''"b'
$ echo "declare -- astr[0]=${astr[0]@Q}"
declare -- astr[0]='a'''"b'
With bash v4.4 you can use the @A
parameter expansion operator to get similar results, but not effectively for a single array element:
A
The expansion is a string in the form of an assignment statement or declare command that, if evaluated, will recreate parameter with its attributes and value.
$ str="a'"b"
$ astr=("$str" "c")
$ echo ${astr[0]@A}
declare -a astr='a'''"b'
$ echo ${astr[@]@A}
declare -a astr=([0]="a'"b" [1]="c")
Or similar to the %q
printf format you can use the @Q
operator:
$ echo ${astr[0]@Q}
'a'''"b'
$ echo "declare -- astr[0]=${astr[0]@Q}"
declare -- astr[0]='a'''"b'
edited yesterday
answered yesterday
Jesse_bJesse_b
12k23064
12k23064
1
a new feature, interesting! mine is v4.3.48, I am almost installing 18.04 (16.04 here), I will check then :)
– Aquarius Power
yesterday
add a comment |
1
a new feature, interesting! mine is v4.3.48, I am almost installing 18.04 (16.04 here), I will check then :)
– Aquarius Power
yesterday
1
1
a new feature, interesting! mine is v4.3.48, I am almost installing 18.04 (16.04 here), I will check then :)
– Aquarius Power
yesterday
a new feature, interesting! mine is v4.3.48, I am almost installing 18.04 (16.04 here), I will check then :)
– Aquarius Power
yesterday
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%2f494175%2fcan-bash-show-one-array-item-id-and-value-using-declare-p%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