What does ${1-1} in bash mean?
Asked Answered
B

1

6

I'm reading the scripts from here and trying to understand what's going on. This function performs changing the directory of a Finder window:

function ee { 
 osascript -e 'set cwd to do shell script "pwd"'\
 -e 'tell application "Finder"'\
 -e "if (${1-1} <= (count Finder windows)) then"\
 -e "set the target of window ${1-1} to (POSIX file cwd) as string"\
 -e 'else' -e "open (POSIX file cwd) as string"\
 -e 'end if' -e 'end tell';\
};\

I'm assuming the $ is interpreted by bash, since it's inside double-quotes. I haven't been able to find what could {1-1} mean. I've played with the expression in separate test scripts but couldn't find a difference from plain $1. Any ideas?

Berl answered 30/12, 2013 at 9:20 Comment(1)
I believe it's a "default". If the user supplied a command line argument then ${1-1} would expand to that argument, otherwise it would simply expand/"default" to whatever was after the hypen -- in your case 1.Nephew
C
13

This means that if argument 1 (${1}) is not set, it will be set to 1.

See parameter substitution here.

 ${parameter-default}, ${parameter:-default}
   If parameter not set, use default.
Chateau answered 30/12, 2013 at 9:25 Comment(2)
+1, Just a note: I was suggested here that, "ABS is not a great reference -- it shows a lot of bad practices in its examples. Better to point folks at mywiki.wooledge.org/BashFAQ/073 "Emergent
@Emergent thank you for the reference. The examples are really bad in tldp.org. But their layout is more concise IMHO.Chateau

© 2022 - 2024 — McMap. All rights reserved.