Linux 从开始索引到结束索引获取子字符串

Linux 从开始索引到结束索引获取子字符串,linux,bash,Linux,Bash,我花了两个小时来研究这个问题,但是运气不好,总是出现“糟糕的替换”错误 我要制作的内容(.sh脚本): 从文件读取(名称),然后我想用给定名称的子字符串替换该名称,并使用偏移量和长度作为脚本参数($1=offset,$2=lenght) 它应该是这样工作的(我认为):new\u user=${user:$1:$2} ->其中user是从.txt读取的(在while循环中),$1和$2是这个.sc的参数 我强调了重要的部分: #/bin/bash 触摸postopek.log 当IFS=“,”读取

我花了两个小时来研究这个问题,但是运气不好,总是出现“糟糕的替换”错误

我要制作的内容(.sh脚本): 从文件读取(名称),然后我想用给定名称的子字符串替换该名称,并使用偏移量和长度作为脚本参数($1=offset,$2=lenght)

它应该是这样工作的(我认为):
new\u user=${user:$1:$2}

->其中user是从.txt读取的(在while循环中),$1和$2是这个.sc的参数

我强调了重要的部分:

#/bin/bash
触摸postopek.log
当IFS=“,”读取全名用户名密码时
做
pass=$(perl-e'print crypt(&ARGV[0],“password”)'$passwordLarge)
new_up=${fullName:$1:$2}重要行
sudouseradd-m-p$pass-d/home/$new\u-up-s/bin/bash$new\u-up
[$?-eq 0]&&echo“制造了一些不重要的东西…”>>postopek.log
sudo mkdir/home/$new_up/gradivo
sudo cp-r/home/administrator/vaje/*/home/$new\u up/gradivo
sudo chown-R$new\u up:$new\u up/home/$new\u up/gradivo
完成
运行脚本时使用的sh shell可能不是bash,请尝试像这样运行它

bash ustvari.sh 3 5
或者只是

/path/to/ustvari.sh 3 5
既然你的意思是bash

${parameter:offset:length}
不是由POSIX指定的,因此如果您的
/bin/sh
是一个不支持子字符串语法的shell,您会遇到
错误替换
,例如:

$ dash
$ echo ${foo:0:1}
dash: 1: Bad substitution

运行脚本时使用的sh shell可能不是bash,请尝试像这样运行它

bash ustvari.sh 3 5
或者只是

/path/to/ustvari.sh 3 5
既然你的意思是bash

${parameter:offset:length}
不是由POSIX指定的,因此如果您的
/bin/sh
是一个不支持子字符串语法的shell,您会遇到
错误替换
,例如:

$ dash
$ echo ${foo:0:1}
dash: 1: Bad substitution

@管理员:sh ustvari.sh 3 5///如果您需要.txt文件,请看这里:$1和$2参数是数字吗?您是否尝试过使用
set-vx
调试选项运行脚本?祝你好运。@administrator:sh ustvari.sh 3 5///如果你需要.txt文件,这里就是:$1和$2参数是数字?您是否尝试过使用
set-vx
调试选项运行脚本?祝你好运