Manipulating Multiple word string in bash array
I have got a simple script as follows.
names=("windows" "ubuntu" "raspbian" "debian" "kali linux")
echo "names array length: ${#names[@]}"
for n in ${names[@]}; do
echo $n
done
My intention and hope to get was:
names array length: 5
windows
ubuntu
raspbian
debian
kali linux
but instead the result i got was:
names array length: 5
windows
ubuntu
raspbian
debian
kali
linux
The array seems to have the correct number of entry but printout appears on 6 lines instead of 5. How can i have the desired output?
bash array
New contributor
ElectricSaga is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
add a comment |
I have got a simple script as follows.
names=("windows" "ubuntu" "raspbian" "debian" "kali linux")
echo "names array length: ${#names[@]}"
for n in ${names[@]}; do
echo $n
done
My intention and hope to get was:
names array length: 5
windows
ubuntu
raspbian
debian
kali linux
but instead the result i got was:
names array length: 5
windows
ubuntu
raspbian
debian
kali
linux
The array seems to have the correct number of entry but printout appears on 6 lines instead of 5. How can i have the desired output?
bash array
New contributor
ElectricSaga is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
add a comment |
I have got a simple script as follows.
names=("windows" "ubuntu" "raspbian" "debian" "kali linux")
echo "names array length: ${#names[@]}"
for n in ${names[@]}; do
echo $n
done
My intention and hope to get was:
names array length: 5
windows
ubuntu
raspbian
debian
kali linux
but instead the result i got was:
names array length: 5
windows
ubuntu
raspbian
debian
kali
linux
The array seems to have the correct number of entry but printout appears on 6 lines instead of 5. How can i have the desired output?
bash array
New contributor
ElectricSaga is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
I have got a simple script as follows.
names=("windows" "ubuntu" "raspbian" "debian" "kali linux")
echo "names array length: ${#names[@]}"
for n in ${names[@]}; do
echo $n
done
My intention and hope to get was:
names array length: 5
windows
ubuntu
raspbian
debian
kali linux
but instead the result i got was:
names array length: 5
windows
ubuntu
raspbian
debian
kali
linux
The array seems to have the correct number of entry but printout appears on 6 lines instead of 5. How can i have the desired output?
bash array
bash array
New contributor
ElectricSaga is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
ElectricSaga is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
edited 8 hours ago
Rui F Ribeiro
39.1k1479130
39.1k1479130
New contributor
ElectricSaga is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
asked 9 hours ago
ElectricSaga
32
32
New contributor
ElectricSaga is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
ElectricSaga is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
ElectricSaga is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
Double quoting the variable expansion ${names[@]} would make it expand to the elements of the array, individually quoted. Not quoting that variable expansion would make the shell split all elements on whitespaces (by default), and additionally perform filename globbing on all the generated words (not an issue with the words that you use). In your example, this would cause kali and linux to be treated as two separate words.
Therefore, use
for name in "${names[@]}"; do
printf '%sn' "$name"
done
or, for this simple script,
printf '%sn' "${names[@]}"
(no loop required since printf will simply reuse its format string for each individual argument)
Related:
- Why does my shell script choke on whitespace or other special characters?
Also (why I always use printf for outputting variable strings):
- Why is printf better than echo?
Thank you for your thorough explaination.
– ElectricSaga
8 hours ago
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
});
}
});
ElectricSaga is a new contributor. Be nice, and check out our Code of Conduct.
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%2f492297%2fmanipulating-multiple-word-string-in-bash-array%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
Double quoting the variable expansion ${names[@]} would make it expand to the elements of the array, individually quoted. Not quoting that variable expansion would make the shell split all elements on whitespaces (by default), and additionally perform filename globbing on all the generated words (not an issue with the words that you use). In your example, this would cause kali and linux to be treated as two separate words.
Therefore, use
for name in "${names[@]}"; do
printf '%sn' "$name"
done
or, for this simple script,
printf '%sn' "${names[@]}"
(no loop required since printf will simply reuse its format string for each individual argument)
Related:
- Why does my shell script choke on whitespace or other special characters?
Also (why I always use printf for outputting variable strings):
- Why is printf better than echo?
Thank you for your thorough explaination.
– ElectricSaga
8 hours ago
add a comment |
Double quoting the variable expansion ${names[@]} would make it expand to the elements of the array, individually quoted. Not quoting that variable expansion would make the shell split all elements on whitespaces (by default), and additionally perform filename globbing on all the generated words (not an issue with the words that you use). In your example, this would cause kali and linux to be treated as two separate words.
Therefore, use
for name in "${names[@]}"; do
printf '%sn' "$name"
done
or, for this simple script,
printf '%sn' "${names[@]}"
(no loop required since printf will simply reuse its format string for each individual argument)
Related:
- Why does my shell script choke on whitespace or other special characters?
Also (why I always use printf for outputting variable strings):
- Why is printf better than echo?
Thank you for your thorough explaination.
– ElectricSaga
8 hours ago
add a comment |
Double quoting the variable expansion ${names[@]} would make it expand to the elements of the array, individually quoted. Not quoting that variable expansion would make the shell split all elements on whitespaces (by default), and additionally perform filename globbing on all the generated words (not an issue with the words that you use). In your example, this would cause kali and linux to be treated as two separate words.
Therefore, use
for name in "${names[@]}"; do
printf '%sn' "$name"
done
or, for this simple script,
printf '%sn' "${names[@]}"
(no loop required since printf will simply reuse its format string for each individual argument)
Related:
- Why does my shell script choke on whitespace or other special characters?
Also (why I always use printf for outputting variable strings):
- Why is printf better than echo?
Double quoting the variable expansion ${names[@]} would make it expand to the elements of the array, individually quoted. Not quoting that variable expansion would make the shell split all elements on whitespaces (by default), and additionally perform filename globbing on all the generated words (not an issue with the words that you use). In your example, this would cause kali and linux to be treated as two separate words.
Therefore, use
for name in "${names[@]}"; do
printf '%sn' "$name"
done
or, for this simple script,
printf '%sn' "${names[@]}"
(no loop required since printf will simply reuse its format string for each individual argument)
Related:
- Why does my shell script choke on whitespace or other special characters?
Also (why I always use printf for outputting variable strings):
- Why is printf better than echo?
edited 8 hours ago
answered 9 hours ago
Kusalananda
122k16230374
122k16230374
Thank you for your thorough explaination.
– ElectricSaga
8 hours ago
add a comment |
Thank you for your thorough explaination.
– ElectricSaga
8 hours ago
Thank you for your thorough explaination.
– ElectricSaga
8 hours ago
Thank you for your thorough explaination.
– ElectricSaga
8 hours ago
add a comment |
ElectricSaga is a new contributor. Be nice, and check out our Code of Conduct.
ElectricSaga is a new contributor. Be nice, and check out our Code of Conduct.
ElectricSaga is a new contributor. Be nice, and check out our Code of Conduct.
ElectricSaga is a new contributor. Be nice, and check out our Code of Conduct.
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.
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%2funix.stackexchange.com%2fquestions%2f492297%2fmanipulating-multiple-word-string-in-bash-array%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