(is invalid here. Did you forget to escape it?
echo (foo) bar
Depends on your intention:
echo "(foo) bar" # Literal parentheses echo "$(foo) bar" # Command expansion echo "foo bar" # Tried to use parentheses for grouping or function invocation
ShellCheck expected an ordinary shell word but found an opening parenthesis instead.
Determine what you intended the parenthesis to do and rewrite accordingly. Common issues include:
echo (FAIL) Some tests failed. In this case, it requires quoting.
echo Today is (date). Add the missing
echo "Today is $(date)"
foo (bar, 42)to call a function. This should be
foo bar 42. Also, shells do not support tuples or passing arrays as single parameters.
Bash allows some parentheses as part of assignment-like tokens to certain commands, including
eval. This is a workaround in Bash to allow commands that normally would not be valid:
eval foo=(bar) # Valid command echo foo=(bar) # Invalid syntax f=foo; eval $f=(bar) # Also invalid
In these cases, please quote the command, such as
eval "foo=(bar)". This does not change the behavior, but stops relying on Bash-specific parsing quirks.
ShellCheck is a static analysis tool for shell scripts. This page is part of its documentation.