AWK: Why $* works inside bash function but not under pipe?
@terdon in this post answered the related question of mine, but I missed one more question in that post.
Plz refer to the following commands:
calc(){ awk "BEGIN{ print $* }" ;}; calc "((3+(2^3)) * 34^2 / 9)-75.89"
The above commands work fine with calculated result '1337'.
echo '((3+(2^3)) * 34^2 / 9)-75.89' | awk "BEGIN{ print $* }"
But the above commands don't give any result while @terdon explained well about why.
Could you advise what made the first example work with $*?
awk
add a comment |
@terdon in this post answered the related question of mine, but I missed one more question in that post.
Plz refer to the following commands:
calc(){ awk "BEGIN{ print $* }" ;}; calc "((3+(2^3)) * 34^2 / 9)-75.89"
The above commands work fine with calculated result '1337'.
echo '((3+(2^3)) * 34^2 / 9)-75.89' | awk "BEGIN{ print $* }"
But the above commands don't give any result while @terdon explained well about why.
Could you advise what made the first example work with $*?
awk
add a comment |
@terdon in this post answered the related question of mine, but I missed one more question in that post.
Plz refer to the following commands:
calc(){ awk "BEGIN{ print $* }" ;}; calc "((3+(2^3)) * 34^2 / 9)-75.89"
The above commands work fine with calculated result '1337'.
echo '((3+(2^3)) * 34^2 / 9)-75.89' | awk "BEGIN{ print $* }"
But the above commands don't give any result while @terdon explained well about why.
Could you advise what made the first example work with $*?
awk
@terdon in this post answered the related question of mine, but I missed one more question in that post.
Plz refer to the following commands:
calc(){ awk "BEGIN{ print $* }" ;}; calc "((3+(2^3)) * 34^2 / 9)-75.89"
The above commands work fine with calculated result '1337'.
echo '((3+(2^3)) * 34^2 / 9)-75.89' | awk "BEGIN{ print $* }"
But the above commands don't give any result while @terdon explained well about why.
Could you advise what made the first example work with $*?
awk
awk
asked Jan 2 at 3:11
user58029
615
615
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
$*
refers to positional parameters - those variables which are referenced by $1
and $2
and so on, and are provided as arguments to scripts and functions. That's the key to your question.
When you have interactive shell , there's no positional parameters set by default, so $*
is empty. You can make it work if you set those via set "((3+(2^3)) * 34^2 / 9)-75.89"
command, which will make $1
equal to that string.
The difference with calc(){ awk "BEGIN{ print $* }" ;};
is that it's a function and functions can process positional parameters (theirs, not the shell's). When you call calc "((3+(2^3)) * 34^2 / 9)-75.89"
you're calling a function with positional parameter "((3+(2^3)) * 34^2 / 9)-75.89"
. There $*
won't be empty:
$ calc(){ echo "Params: '$*'"; awk "BEGIN{ print $* }" ;}; calc "((3+(2^3)) * 34^2 / 9)-75.89"
Params: '((3+(2^3)) * 34^2 / 9)-75.89'
1337
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "89"
};
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%2faskubuntu.com%2fquestions%2f1106151%2fawk-why-works-inside-bash-function-but-not-under-pipe%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
$*
refers to positional parameters - those variables which are referenced by $1
and $2
and so on, and are provided as arguments to scripts and functions. That's the key to your question.
When you have interactive shell , there's no positional parameters set by default, so $*
is empty. You can make it work if you set those via set "((3+(2^3)) * 34^2 / 9)-75.89"
command, which will make $1
equal to that string.
The difference with calc(){ awk "BEGIN{ print $* }" ;};
is that it's a function and functions can process positional parameters (theirs, not the shell's). When you call calc "((3+(2^3)) * 34^2 / 9)-75.89"
you're calling a function with positional parameter "((3+(2^3)) * 34^2 / 9)-75.89"
. There $*
won't be empty:
$ calc(){ echo "Params: '$*'"; awk "BEGIN{ print $* }" ;}; calc "((3+(2^3)) * 34^2 / 9)-75.89"
Params: '((3+(2^3)) * 34^2 / 9)-75.89'
1337
add a comment |
$*
refers to positional parameters - those variables which are referenced by $1
and $2
and so on, and are provided as arguments to scripts and functions. That's the key to your question.
When you have interactive shell , there's no positional parameters set by default, so $*
is empty. You can make it work if you set those via set "((3+(2^3)) * 34^2 / 9)-75.89"
command, which will make $1
equal to that string.
The difference with calc(){ awk "BEGIN{ print $* }" ;};
is that it's a function and functions can process positional parameters (theirs, not the shell's). When you call calc "((3+(2^3)) * 34^2 / 9)-75.89"
you're calling a function with positional parameter "((3+(2^3)) * 34^2 / 9)-75.89"
. There $*
won't be empty:
$ calc(){ echo "Params: '$*'"; awk "BEGIN{ print $* }" ;}; calc "((3+(2^3)) * 34^2 / 9)-75.89"
Params: '((3+(2^3)) * 34^2 / 9)-75.89'
1337
add a comment |
$*
refers to positional parameters - those variables which are referenced by $1
and $2
and so on, and are provided as arguments to scripts and functions. That's the key to your question.
When you have interactive shell , there's no positional parameters set by default, so $*
is empty. You can make it work if you set those via set "((3+(2^3)) * 34^2 / 9)-75.89"
command, which will make $1
equal to that string.
The difference with calc(){ awk "BEGIN{ print $* }" ;};
is that it's a function and functions can process positional parameters (theirs, not the shell's). When you call calc "((3+(2^3)) * 34^2 / 9)-75.89"
you're calling a function with positional parameter "((3+(2^3)) * 34^2 / 9)-75.89"
. There $*
won't be empty:
$ calc(){ echo "Params: '$*'"; awk "BEGIN{ print $* }" ;}; calc "((3+(2^3)) * 34^2 / 9)-75.89"
Params: '((3+(2^3)) * 34^2 / 9)-75.89'
1337
$*
refers to positional parameters - those variables which are referenced by $1
and $2
and so on, and are provided as arguments to scripts and functions. That's the key to your question.
When you have interactive shell , there's no positional parameters set by default, so $*
is empty. You can make it work if you set those via set "((3+(2^3)) * 34^2 / 9)-75.89"
command, which will make $1
equal to that string.
The difference with calc(){ awk "BEGIN{ print $* }" ;};
is that it's a function and functions can process positional parameters (theirs, not the shell's). When you call calc "((3+(2^3)) * 34^2 / 9)-75.89"
you're calling a function with positional parameter "((3+(2^3)) * 34^2 / 9)-75.89"
. There $*
won't be empty:
$ calc(){ echo "Params: '$*'"; awk "BEGIN{ print $* }" ;}; calc "((3+(2^3)) * 34^2 / 9)-75.89"
Params: '((3+(2^3)) * 34^2 / 9)-75.89'
1337
edited 2 days ago
terdon♦
64.6k12137214
64.6k12137214
answered Jan 2 at 3:34
Sergiy Kolodyazhnyy
69.7k9144306
69.7k9144306
add a comment |
add a comment |
Thanks for contributing an answer to Ask Ubuntu!
- 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%2faskubuntu.com%2fquestions%2f1106151%2fawk-why-works-inside-bash-function-but-not-under-pipe%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