read command with ??? input
Clash Royale CLAN TAG#URR8PPP
up vote
1
down vote
favorite
Why when reading input with read
, and the input is ???
the result is bin src
?
$ read
???
$ echo $REPLY
bin src
Running bash
on macOS.
bash osx read
add a comment |
up vote
1
down vote
favorite
Why when reading input with read
, and the input is ???
the result is bin src
?
$ read
???
$ echo $REPLY
bin src
Running bash
on macOS.
bash osx read
add a comment |
up vote
1
down vote
favorite
up vote
1
down vote
favorite
Why when reading input with read
, and the input is ???
the result is bin src
?
$ read
???
$ echo $REPLY
bin src
Running bash
on macOS.
bash osx read
Why when reading input with read
, and the input is ???
the result is bin src
?
$ read
???
$ echo $REPLY
bin src
Running bash
on macOS.
bash osx read
bash osx read
edited Nov 22 at 21:18
Kusalananda
118k16221360
118k16221360
asked Nov 22 at 18:30
YardenST
1286
1286
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
3
down vote
accepted
The data held in the variable REPLY
is still ???
, but the result from using the variable unquoted with echo
, like you are doing, is the same as doing
echo ???
You need to double quote all variable expansions.
When you leave a variable expansion unquoted, two things happens:
- The value of the variable is split into multiple words. The splitting happens wherever a character is the same as one of the characters in
$IFS
(a space, tab and a newline by default). In your case, the result of the splitting is the same as before the splitting (the single word???
) if the value of$IFS
is not modified. - Each generated word undergoes filename generation, or "filename globbing". That means that if a word is a globbing pattern, which
???
is, any filenames matching that pattern will replace the pattern. The pattern???
matches any three character long filename and you obviously have two of those in your current working directory.
Neither of these things happens if the variable expansion is double-quoted.
Example, recreating your issue and solving it:
$ ls
X11R6 games lib libexec mdec ports share xobj
bin include libdata local obj sbin src
$ read
???
$ echo $REPLY
bin lib obj src
$ echo ???
bin lib obj src
$ echo "$REPLY"
???
Another example in the same directory as above, showing that the string that I input is split into two words (???
and s*
) and that these then gets used as filename globbing patterns:
$ read
??? s*
$ echo $REPLY
bin lib obj src sbin share src
$ echo "$REPLY"
??? s*
Notice that src
gets outputted twice as it matches both ???
and s*
.
Related:
- Why does my shell script choke on whitespace or other special characters?
- When is double-quoting necessary?
Short summary of the above questions and answers: Always double quote all expansions, unless you know exactly which ones don't need it or if you actually want to invoke splitting and globbing.
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
3
down vote
accepted
The data held in the variable REPLY
is still ???
, but the result from using the variable unquoted with echo
, like you are doing, is the same as doing
echo ???
You need to double quote all variable expansions.
When you leave a variable expansion unquoted, two things happens:
- The value of the variable is split into multiple words. The splitting happens wherever a character is the same as one of the characters in
$IFS
(a space, tab and a newline by default). In your case, the result of the splitting is the same as before the splitting (the single word???
) if the value of$IFS
is not modified. - Each generated word undergoes filename generation, or "filename globbing". That means that if a word is a globbing pattern, which
???
is, any filenames matching that pattern will replace the pattern. The pattern???
matches any three character long filename and you obviously have two of those in your current working directory.
Neither of these things happens if the variable expansion is double-quoted.
Example, recreating your issue and solving it:
$ ls
X11R6 games lib libexec mdec ports share xobj
bin include libdata local obj sbin src
$ read
???
$ echo $REPLY
bin lib obj src
$ echo ???
bin lib obj src
$ echo "$REPLY"
???
Another example in the same directory as above, showing that the string that I input is split into two words (???
and s*
) and that these then gets used as filename globbing patterns:
$ read
??? s*
$ echo $REPLY
bin lib obj src sbin share src
$ echo "$REPLY"
??? s*
Notice that src
gets outputted twice as it matches both ???
and s*
.
Related:
- Why does my shell script choke on whitespace or other special characters?
- When is double-quoting necessary?
Short summary of the above questions and answers: Always double quote all expansions, unless you know exactly which ones don't need it or if you actually want to invoke splitting and globbing.
add a comment |
up vote
3
down vote
accepted
The data held in the variable REPLY
is still ???
, but the result from using the variable unquoted with echo
, like you are doing, is the same as doing
echo ???
You need to double quote all variable expansions.
When you leave a variable expansion unquoted, two things happens:
- The value of the variable is split into multiple words. The splitting happens wherever a character is the same as one of the characters in
$IFS
(a space, tab and a newline by default). In your case, the result of the splitting is the same as before the splitting (the single word???
) if the value of$IFS
is not modified. - Each generated word undergoes filename generation, or "filename globbing". That means that if a word is a globbing pattern, which
???
is, any filenames matching that pattern will replace the pattern. The pattern???
matches any three character long filename and you obviously have two of those in your current working directory.
Neither of these things happens if the variable expansion is double-quoted.
Example, recreating your issue and solving it:
$ ls
X11R6 games lib libexec mdec ports share xobj
bin include libdata local obj sbin src
$ read
???
$ echo $REPLY
bin lib obj src
$ echo ???
bin lib obj src
$ echo "$REPLY"
???
Another example in the same directory as above, showing that the string that I input is split into two words (???
and s*
) and that these then gets used as filename globbing patterns:
$ read
??? s*
$ echo $REPLY
bin lib obj src sbin share src
$ echo "$REPLY"
??? s*
Notice that src
gets outputted twice as it matches both ???
and s*
.
Related:
- Why does my shell script choke on whitespace or other special characters?
- When is double-quoting necessary?
Short summary of the above questions and answers: Always double quote all expansions, unless you know exactly which ones don't need it or if you actually want to invoke splitting and globbing.
add a comment |
up vote
3
down vote
accepted
up vote
3
down vote
accepted
The data held in the variable REPLY
is still ???
, but the result from using the variable unquoted with echo
, like you are doing, is the same as doing
echo ???
You need to double quote all variable expansions.
When you leave a variable expansion unquoted, two things happens:
- The value of the variable is split into multiple words. The splitting happens wherever a character is the same as one of the characters in
$IFS
(a space, tab and a newline by default). In your case, the result of the splitting is the same as before the splitting (the single word???
) if the value of$IFS
is not modified. - Each generated word undergoes filename generation, or "filename globbing". That means that if a word is a globbing pattern, which
???
is, any filenames matching that pattern will replace the pattern. The pattern???
matches any three character long filename and you obviously have two of those in your current working directory.
Neither of these things happens if the variable expansion is double-quoted.
Example, recreating your issue and solving it:
$ ls
X11R6 games lib libexec mdec ports share xobj
bin include libdata local obj sbin src
$ read
???
$ echo $REPLY
bin lib obj src
$ echo ???
bin lib obj src
$ echo "$REPLY"
???
Another example in the same directory as above, showing that the string that I input is split into two words (???
and s*
) and that these then gets used as filename globbing patterns:
$ read
??? s*
$ echo $REPLY
bin lib obj src sbin share src
$ echo "$REPLY"
??? s*
Notice that src
gets outputted twice as it matches both ???
and s*
.
Related:
- Why does my shell script choke on whitespace or other special characters?
- When is double-quoting necessary?
Short summary of the above questions and answers: Always double quote all expansions, unless you know exactly which ones don't need it or if you actually want to invoke splitting and globbing.
The data held in the variable REPLY
is still ???
, but the result from using the variable unquoted with echo
, like you are doing, is the same as doing
echo ???
You need to double quote all variable expansions.
When you leave a variable expansion unquoted, two things happens:
- The value of the variable is split into multiple words. The splitting happens wherever a character is the same as one of the characters in
$IFS
(a space, tab and a newline by default). In your case, the result of the splitting is the same as before the splitting (the single word???
) if the value of$IFS
is not modified. - Each generated word undergoes filename generation, or "filename globbing". That means that if a word is a globbing pattern, which
???
is, any filenames matching that pattern will replace the pattern. The pattern???
matches any three character long filename and you obviously have two of those in your current working directory.
Neither of these things happens if the variable expansion is double-quoted.
Example, recreating your issue and solving it:
$ ls
X11R6 games lib libexec mdec ports share xobj
bin include libdata local obj sbin src
$ read
???
$ echo $REPLY
bin lib obj src
$ echo ???
bin lib obj src
$ echo "$REPLY"
???
Another example in the same directory as above, showing that the string that I input is split into two words (???
and s*
) and that these then gets used as filename globbing patterns:
$ read
??? s*
$ echo $REPLY
bin lib obj src sbin share src
$ echo "$REPLY"
??? s*
Notice that src
gets outputted twice as it matches both ???
and s*
.
Related:
- Why does my shell script choke on whitespace or other special characters?
- When is double-quoting necessary?
Short summary of the above questions and answers: Always double quote all expansions, unless you know exactly which ones don't need it or if you actually want to invoke splitting and globbing.
edited Nov 22 at 21:19
answered Nov 22 at 18:38
Kusalananda
118k16221360
118k16221360
add a comment |
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.
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%2f483510%2fread-command-with-input%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