如何获得变量的第一个字符

Mar*_*tyn 10 bash

我正在尝试获取变量的第一个字符,但是我遇到了错误的替换错误.任何人都可以帮我修复它吗?

代码是:

while IFS=$'\n' read line
do
  if [ ! ${line:0:1} == "#"] # Error on this line
  then
    eval echo "$line"
    eval createSymlink $line
  fi
done < /some/file.txt
Run Code Online (Sandbox Code Playgroud)

我做错了什么或有更好的方法吗?

- 编辑 -

根据要求 - 这是一些存储在/some/file.txt中的示例输入

$MOZ_HOME/mobile/android/chrome/content/browser.js
$MOZ_HOME/mobile/android/locales/en-US/chrome/browser.properties
$MOZ_HOME/mobile/android/components/ContentPermissionPrompt.js
Run Code Online (Sandbox Code Playgroud)

fed*_*qui 16

要获取变量的第一个字符,您需要说:

v="hello"
$ echo "${v:0:1}"
h
Run Code Online (Sandbox Code Playgroud)

但是,您的代码有语法错误:

[ ! ${line:0:1} == "#"]
#                     ^-- missing space
Run Code Online (Sandbox Code Playgroud)

所以这可以做到这一点:

$ a="123456"
$ [ ! "${a:0:1}" == "#" ] && echo "doesnt start with #"
doesnt start with #
$ a="#123456"
$ [ ! "${a:0:1}" == "#" ] && echo "doesnt start with #"
$ 
Run Code Online (Sandbox Code Playgroud)

它也可以这样做:

$ a="#123456"
$ [ "$(expr substr $a 1 1)" != "#" ] && echo "does not start with #"
$ 
$ a="123456"
$ [ "$(expr substr $a 1 1)" != "#" ] && echo "does not start with #"
does not start with #
Run Code Online (Sandbox Code Playgroud)

更新

根据您的更新,这对我有用:

while IFS=$'\n' read line
do
  echo $line
  if [ ! "${line:0:1}" == "#" ] # Error on this line
  then
    eval echo "$line"
    eval createSymlink $line
  fi
done < file
Run Code Online (Sandbox Code Playgroud)