Chapter 7

  1. Since we used the $1 variable not $@, the function will return the first element only.
  2. 50. Yes, it's a global variable, but because we printed the value before the function call, the variable isn't affected.
  3. Missing brackets () or adding the keyword function before the function name. It should be written like this:
clean_file() { 
    is_file "$1" 
    BEFORE=$(wc -l "$1") 
    echo "The file $1 starts with $BEFORE" 
    sed -i.bak '/^\s*#/d;/^$/d' "$1" 
    AFTER=$(wc -l "$1") 
    echo "The file $1 is now $AFTER" 
} 
  1. The problem is in the function call. We shouldn't use brackets () during a function call. Brackets should only be used in function definitions. The correct code will be like this:
#!/bin/bash 
myfunc() { 
arr=$@ 
echo "The array from inside the function: ${arr[*]}" 
}
test_arr=(1 2 3) 
echo "The origianl array is: ${test_arr[*]}" 
myfunc ${test_arr[*]}