Zub*_*ain 3 macos shell terminal posix sh
每当我在Mac OSX终端中运行Shell脚本时,我都会收到错误消息“ ./query.sh:第5行:$ {1 ,,}:错误替换”
#!/bin/bash
dir=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
if [ "$1" != "" ]; then
letter1=$(echo ${1,,}|(cut -b1))new
if [[ $letter1 == [a-zA-Z0-9] ]]; then
if [ -f "$dir/data/$letter1" ]; then
grep -ai "^$1" "$dir/data/$letter1"
else
letter2=$(echo ${1,,}|cut -b2)
if [[ $letter2 == [a-zA-Z0-9] ]]; then
if [ -f "$dir/data/$letter1/$letter2" ]; then
grep -ai "^$1" "$dir/data/$letter1/$letter2"
else
letter3=$(echo ${1,,}|cut -b3)
if [[ $letter3 == [a-zA-Z0-9] ]]; then
if [ -f "$dir/data/$letter1/$letter2/$letter3" ]; then
grep -ai "^$1" "$dir/data/$letter1/$letter2/$letter3"
fi
else
if [ -f "$dir/data/$letter1/$letter2/symbols" ]; then
grep -ai "^$1" "$dir/data/$letter1/$letter2/symbols"
fi
fi
fi
else
if [ -f "$dir/data/$letter1/symbols" ]; then
grep -ai "^$1" "$dir/data/$letter1/symbols"
fi
fi
fi
else
if [ -f "$dir/data/symbols" ]; then
grep -ai "^$1" "$dir/data/symbols"
fi
fi
else
echo "[*] Example: ./query name@domain.com"
fi
Run Code Online (Sandbox Code Playgroud)
脚本功能是搜索大量数据文件,因此有人可以帮助我查明问题的根源吗?
该,,
操作员是在bash
4.0 中引入的,但/bin/bash
在macOS上仍是3.2版。您可以安装的较新版本bash
并相应地更改shebang,也可以letter1=$(echo "$1" | tr '[:upper:]' '[:lower:]' | cut -b1)
改用。
(但是,您可以使用${letter:0:1}
,${letter:1:1}
等等代替cut
从字符串中获取单个字母的调用。)
我的建议是/bin/bash
在macOS上将其视为与POSIX兼容的外壳。#!/bin/sh
如果您想要一个可移植的脚本,请使用;如果要使用扩展功能(以可移植性为代价),请使用#!/usr/local/bin/bash
(或在安装的新版本之后进行适当的使用bash
)bash
。