linux - 获取从开始索引到结束索引的子字符串

标签 linux bash

我为此工作了两个小时,但运气不好,总是出现“替换错误”错误。

我想做什么(.sh 脚本): 从文件(名称)中读取,然后我想用脚本参数的偏移量和长度用给定名称的子字符串替换此名称($1 = 偏移量,$2 = 长度)。

它应该像这样工作(我认为):new_user=${user:$1:$2}
-> 从 .txt 中读取用户(在 while 循环中)并且 $1 和 $2 是此 .sc 的参数

我已经强调了重要的部分:

#!/bin/bash
touch postopek.log
while IFS="," read fullName userName passwordLarge
do
 pass=$(perl -e 'print crypt(&ARGV[0], "password")' $passwordLarge)
 new_up=${fullName:$1:$2} # important line
 sudo useradd -m -p $pass -d /home/$new_up -s /bin/bash $new_up
 [ $? -eq 0] && echo "Made something bla bla not important..." >> postopek.log
 sudo mkdir /home/$new_up/gradivo
 sudo cp -r /home/administrator/vaje/* /home/$new_up/gradivo
 sudo chown -R $new_up:$new_up /home/$new_up/gradivo
done < /home/administrator/seznam.txt

最佳答案

您正在运行脚本的 sh shell 可能不是 bash,尝试像这样运行它

bash ustvari.sh 3 5

或者只是

/path/to/ustvari.sh 3 5

因为你的shebang无论如何指向 bash。

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

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

关于linux - 获取从开始索引到结束索引的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15909649/

相关文章:

python - RHEL6 : Switch Python back to original default version

linux - awk 按列对特定组求和

Linux Bash - 将错误重定向到文件

bash - 如何在bash中建立超时后默认操作的菜单?

arrays - 如何比较 BASH 中的数组元素?

linux -/etc/fstab 和/etc/mtab 有什么区别

linux - 为什么 bash 脚本中需要 $(( ... )) ?

c - execl ("/bin/bash","bash","-l","-c","env",NULL),怎么了?

git - 如何创建个人 git 函数,每次启动 Bash 时都可用?

bash - 将我的容器入门文件翻译为docker-compose.yml