CS 279 - Week 3 Lab - 2022-09-08 NOTES built to POST (since could not figure out how to project from lab on 2022-09-08...!) ===== another way to reference the value of a shell variable ===== * you know you can use $ to reference the value of a shell variable: > declare name=David > echo The string value is $name The string value is David * you can ALSO use ${} to reference its value: > echo The string value is ${name} The string value is David * an example where ${} can be handy: ...when there might be CONFUSION about exactly where the variable name ends; > name1=stuff > echo $name1 stuff > echo ${name}1 David1 ===== double quotes and single quotes and shell variables ===== * Consider: sometimes you want a blank where it would otherwise confuse the shell -- for example, a multi-word greeting: > greeting=Hi there -bash: there: command not found * putting the desired text in double quotes OR single quotes solves this problem: > greeting="Hi there" > echo $greeting Hi there > greeting='Hello mate' > echo $greeting Hello mate * BUT: there is an IMPORTANT DIFFERENCE between single and double quotes if the contents include a shell variable! * if a shell variable is in double quotes - WILL parse variable, use its value! (In another language, I've heard this called variable interpolation...) * if a shell variable is in single quotes - WON'T parse variable, you'll see the variable name! * SO: > echo "Now you see: $greeting" Now you see: Hello mate > echo 'Now you see: $greeting' Now you see: $greeting ===== and you can escape the special meaning of $ with \ also ===== * ...what the heading says! This also keeps the variable from being parsed by the shell: > echo \$greeting is: $greeting $greeting is: Hello mate ===== using backquotes to set a variable to a command's result ===== * because sometimes you want to use the result of a command later (in the shell or in a shell script!) * IF you surround a shell command with backquotes, its result will be assignable to a variable (instead of printed to the screen) > declare here=`pwd` > echo \$here is now: $here $here is now: /Users/smtuttle/humboldt/f22cs279/279labs/279lab03 > curr_contents=`ls` > echo $curr_contents 279lab03-ex.odt 279lab03.odt fruit-clicker * this can be quite useful, as I hope we'll see as we continue the semester! ===== let command - to treat shell variable contents like numbers! ===== * When setting or changing numeric values in variables, the let command is used > let val=10 > let val=${val}+5 > echo $val 15 # added 5 to 10, treated as numbers * Without the let, treats the variable's value as a string: > val+=1 > echo $val 151 # concatenated the 1, because no let used above > let val+=1 > echo $val 152 * does ++ work in bash? ...looks like it does IF you use it with let: > val++ -bash: val++: command not found > $val++ -bash: 152++: command not found > let val++ > echo $val 153 # added 1! when let used with ++ * and: it appears you can use let even after initially setting a shell variable: > stuff=13 > stuff+=2 > echo $stuff 132 # no let, so appended > let stuff+=2 > echo $stuff 134 # had let, so added