Running a Test with expression in a string
Clash Royale CLAN TAG#URR8PPP
up vote
2
down vote
favorite
I am trying to run the test command from a string. The string contains the expression.
TEST="! -e ~/bin/xyz"
if [ `echo "$TEST"` ]; then
echo running "$TEST";
fi
However, the above if condition does evaluate to true but if I plug in the command directly (as below), it evaluates to false.
if [ ! -e ~/bin/xyz ]; then
echo running;
fi
The second snippet's behavior is correct. Can someone help me understand why there is a difference and also how I can correct the first snippet to give me the right result?
linux shell test
New contributor
Ashwin 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 |Â
up vote
2
down vote
favorite
I am trying to run the test command from a string. The string contains the expression.
TEST="! -e ~/bin/xyz"
if [ `echo "$TEST"` ]; then
echo running "$TEST";
fi
However, the above if condition does evaluate to true but if I plug in the command directly (as below), it evaluates to false.
if [ ! -e ~/bin/xyz ]; then
echo running;
fi
The second snippet's behavior is correct. Can someone help me understand why there is a difference and also how I can correct the first snippet to give me the right result?
linux shell test
New contributor
Ashwin is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
1
I would not recommend storing test expressions in strings, as there isn't really a safe way to handle this. I'd recommend backing up and asking if there's a better way to do it. What's the actual problem you're trying to solve by storing test expressions in a string?
– Gordon Davisson
3 hours ago
add a comment |Â
up vote
2
down vote
favorite
up vote
2
down vote
favorite
I am trying to run the test command from a string. The string contains the expression.
TEST="! -e ~/bin/xyz"
if [ `echo "$TEST"` ]; then
echo running "$TEST";
fi
However, the above if condition does evaluate to true but if I plug in the command directly (as below), it evaluates to false.
if [ ! -e ~/bin/xyz ]; then
echo running;
fi
The second snippet's behavior is correct. Can someone help me understand why there is a difference and also how I can correct the first snippet to give me the right result?
linux shell test
New contributor
Ashwin is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
I am trying to run the test command from a string. The string contains the expression.
TEST="! -e ~/bin/xyz"
if [ `echo "$TEST"` ]; then
echo running "$TEST";
fi
However, the above if condition does evaluate to true but if I plug in the command directly (as below), it evaluates to false.
if [ ! -e ~/bin/xyz ]; then
echo running;
fi
The second snippet's behavior is correct. Can someone help me understand why there is a difference and also how I can correct the first snippet to give me the right result?
linux shell test
linux shell test
New contributor
Ashwin is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
Ashwin is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
edited 4 hours ago
jimmij
29.9k867102
29.9k867102
New contributor
Ashwin is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
asked 5 hours ago
Ashwin
212
212
New contributor
Ashwin is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
Ashwin is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
Ashwin is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
1
I would not recommend storing test expressions in strings, as there isn't really a safe way to handle this. I'd recommend backing up and asking if there's a better way to do it. What's the actual problem you're trying to solve by storing test expressions in a string?
– Gordon Davisson
3 hours ago
add a comment |Â
1
I would not recommend storing test expressions in strings, as there isn't really a safe way to handle this. I'd recommend backing up and asking if there's a better way to do it. What's the actual problem you're trying to solve by storing test expressions in a string?
– Gordon Davisson
3 hours ago
1
1
I would not recommend storing test expressions in strings, as there isn't really a safe way to handle this. I'd recommend backing up and asking if there's a better way to do it. What's the actual problem you're trying to solve by storing test expressions in a string?
– Gordon Davisson
3 hours ago
I would not recommend storing test expressions in strings, as there isn't really a safe way to handle this. I'd recommend backing up and asking if there's a better way to do it. What's the actual problem you're trying to solve by storing test expressions in a string?
– Gordon Davisson
3 hours ago
add a comment |Â
1 Answer
1
active
oldest
votes
up vote
2
down vote
The problem with first example is that you are testing whether the string that echo
returns has non-zero length. One solution to this problem is to eval
uate tested expression:
TEST="! -e ~/bin/xyz"
if eval "[ $TEST ]"; then
echo running "$TEST";
fi
Notice, that brackets are inside eval
, because [
is a command, so we evaluate this command together with variable $TEST
as its argument.
1
Warning: as always,eval
is an open invitation to weird bugs. It blurs the distinction between data and executable code (even more than it usually is in the shell), so you risk having something you thought was just data (e.g. a filename) get parsed & maybe executed as code. Basically,eval
is only safe if you have full control over the string being evaluated (and if you have full control over it, you really shouldn't needeval
).
– Gordon Davisson
3 hours ago
add a comment |Â
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
2
down vote
The problem with first example is that you are testing whether the string that echo
returns has non-zero length. One solution to this problem is to eval
uate tested expression:
TEST="! -e ~/bin/xyz"
if eval "[ $TEST ]"; then
echo running "$TEST";
fi
Notice, that brackets are inside eval
, because [
is a command, so we evaluate this command together with variable $TEST
as its argument.
1
Warning: as always,eval
is an open invitation to weird bugs. It blurs the distinction between data and executable code (even more than it usually is in the shell), so you risk having something you thought was just data (e.g. a filename) get parsed & maybe executed as code. Basically,eval
is only safe if you have full control over the string being evaluated (and if you have full control over it, you really shouldn't needeval
).
– Gordon Davisson
3 hours ago
add a comment |Â
up vote
2
down vote
The problem with first example is that you are testing whether the string that echo
returns has non-zero length. One solution to this problem is to eval
uate tested expression:
TEST="! -e ~/bin/xyz"
if eval "[ $TEST ]"; then
echo running "$TEST";
fi
Notice, that brackets are inside eval
, because [
is a command, so we evaluate this command together with variable $TEST
as its argument.
1
Warning: as always,eval
is an open invitation to weird bugs. It blurs the distinction between data and executable code (even more than it usually is in the shell), so you risk having something you thought was just data (e.g. a filename) get parsed & maybe executed as code. Basically,eval
is only safe if you have full control over the string being evaluated (and if you have full control over it, you really shouldn't needeval
).
– Gordon Davisson
3 hours ago
add a comment |Â
up vote
2
down vote
up vote
2
down vote
The problem with first example is that you are testing whether the string that echo
returns has non-zero length. One solution to this problem is to eval
uate tested expression:
TEST="! -e ~/bin/xyz"
if eval "[ $TEST ]"; then
echo running "$TEST";
fi
Notice, that brackets are inside eval
, because [
is a command, so we evaluate this command together with variable $TEST
as its argument.
The problem with first example is that you are testing whether the string that echo
returns has non-zero length. One solution to this problem is to eval
uate tested expression:
TEST="! -e ~/bin/xyz"
if eval "[ $TEST ]"; then
echo running "$TEST";
fi
Notice, that brackets are inside eval
, because [
is a command, so we evaluate this command together with variable $TEST
as its argument.
edited 3 hours ago


Kusalananda
113k15216344
113k15216344
answered 4 hours ago
jimmij
29.9k867102
29.9k867102
1
Warning: as always,eval
is an open invitation to weird bugs. It blurs the distinction between data and executable code (even more than it usually is in the shell), so you risk having something you thought was just data (e.g. a filename) get parsed & maybe executed as code. Basically,eval
is only safe if you have full control over the string being evaluated (and if you have full control over it, you really shouldn't needeval
).
– Gordon Davisson
3 hours ago
add a comment |Â
1
Warning: as always,eval
is an open invitation to weird bugs. It blurs the distinction between data and executable code (even more than it usually is in the shell), so you risk having something you thought was just data (e.g. a filename) get parsed & maybe executed as code. Basically,eval
is only safe if you have full control over the string being evaluated (and if you have full control over it, you really shouldn't needeval
).
– Gordon Davisson
3 hours ago
1
1
Warning: as always,
eval
is an open invitation to weird bugs. It blurs the distinction between data and executable code (even more than it usually is in the shell), so you risk having something you thought was just data (e.g. a filename) get parsed & maybe executed as code. Basically, eval
is only safe if you have full control over the string being evaluated (and if you have full control over it, you really shouldn't need eval
).– Gordon Davisson
3 hours ago
Warning: as always,
eval
is an open invitation to weird bugs. It blurs the distinction between data and executable code (even more than it usually is in the shell), so you risk having something you thought was just data (e.g. a filename) get parsed & maybe executed as code. Basically, eval
is only safe if you have full control over the string being evaluated (and if you have full control over it, you really shouldn't need eval
).– Gordon Davisson
3 hours ago
add a comment |Â
Ashwin is a new contributor. Be nice, and check out our Code of Conduct.
Ashwin is a new contributor. Be nice, and check out our Code of Conduct.
Ashwin is a new contributor. Be nice, and check out our Code of Conduct.
Ashwin 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
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f479693%2frunning-a-test-with-expression-in-a-string%23new-answer', 'question_page');
);
Post as a guest
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
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
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
1
I would not recommend storing test expressions in strings, as there isn't really a safe way to handle this. I'd recommend backing up and asking if there's a better way to do it. What's the actual problem you're trying to solve by storing test expressions in a string?
– Gordon Davisson
3 hours ago