All Questions
44
questions
181
votes
1
answer
78k
views
When is double-quoting necessary?
The old advice used to be to double-quote any expression involving a $VARIABLE, at least if one wanted it to be interpreted by the shell as one single item, otherwise, any spaces in the content of $...
1
vote
1
answer
181
views
Run `git commit -m` with single quotes in zsh
I sometimes use characters such as ! and $ in commit messages, they need to be manually escaped, but not if you use single quotes like this git commit -m 'My $message here!'. I tried to write a ...
7
votes
2
answers
1k
views
Echoing "!" inside a string does some weird things [duplicate]
If I type in this:
echo "Hello, World!"
I don't know the name of it, but it prompts me for the next line. You know the PS2 thing. Or if you type echo \ and press Enter.
Why?
Well I know ...
25
votes
5
answers
9k
views
Why doesn't alias foo='echo "This is a quote: \'"' work? [duplicate]
In order to remind myself when I try to use shopt in Zsh instead of setopt, I created the following alias, testing it first at a shell prompt:
$ alias shopt='echo "You\'re looking for setopt. This is ...
4
votes
1
answer
1k
views
Problem with passing parameters containing spaces and wild card characters
I have a problem passing parameters if the parameters may contain wildcards and/or spaces, if those parameters are optional. Since this sounds pretty abstract, let's have a small example: The ...
73
votes
1
answer
13k
views
What is the difference between the "...", '...', $'...', and $"..." quotes in the shell?
Sometimes I see shell scripts use all of these different ways of quoting some text: "...", '...', $'...', and $"...". Why are there so many different kinds of quote being used?
Do ...
2
votes
2
answers
133
views
Test fails (correctly) on command line, but succeeds (incorrectly) in script
For the sake of this question, assume that the glob /a/b/c/* produces no matches.
This means that the following test should fail (in other words, it should produce a non-zero $?):
[[ -n /a/b/c/*(#qN) ]...
2
votes
2
answers
919
views
Escape variable for zsh's `print -P`
I was looking for a way to escape a variable containing format specifiers and special characters like quotes, backslashes and line breaks so that when passing it to print -P it'll print out literally.
...
1
vote
2
answers
342
views
Please explain the behavior of these parameter expansions using IFS?
I'm trying to figure out how to use the ${parameter%word} expansion with $@ and $*. It started by trying to make a script to combine pdfs using ghostscript, but I ran into some weird behavior with ...
0
votes
1
answer
183
views
How to set sed command correctly
When I try following commands, (I'd like to rewrite sql).
Day='2020/12/1'
Dir=/home/test/data
sql=`cat $Dir"/"$test".sql" | sed -e "s/Day/$Day/g"`
I suffered following ...
10
votes
4
answers
4k
views
Why does cut fail with bash and not zsh?
I create a file with tab-delimited fields.
echo foo$'\t'bar$'\t'baz$'\n'foo$'\t'bar$'\t'baz > input
I have the following script named zsh.sh
#!/usr/bin/env zsh
while read line; do
<<<$...
2
votes
1
answer
1k
views
Unable to run npm install with version specification
I am trying to run a simple npm install with zsh terminal.
npm install --save-dev @typescript-eslint/eslint-plugin@^4.0.0
zsh: no matches found: @typescript-eslint/eslint-plugin@^4.0.0
It appears ...
1
vote
1
answer
335
views
Using variables for Ghostscript options/flags causes errors
I am scripting the creation/manipulation of PDF files so I am using gs (Ghostscript). The problem I am having is that if I use a variable for the the options, gs errors out.
The command that I am ...
3
votes
1
answer
115
views
zsh fail to keep unquoted `$*` and `$@` equal
All shells tested do the same for the (quoted) pair "$*" and "$@" with this code:
c='set a b @ c; IFS=:,@ ; a=$(printf "<%s> " "$*"); b=$(printf "<%s> " "$@"); printf "%-20s and %-20s\n" "...
29
votes
3
answers
30k
views
Escaping quotes in zsh alias
Following on from this question about stripping newlines out of text, I want to turn this into a zsh alias as follows:
alias striplines=' awk " /^$/ {print \"\n\"; } /./ {printf( \" %s \",$0);}"'
I'...