初学者用户在这里。我已将用户input作为变量,我试图将某些字符存储为单独的变量。这样做给了我"permission denied"。有关如何解决此问题的任何建议?
#!/bin/sh
echo 'Please enter specific release (EX: 20L2): '
read var
echo $var
xx=$(var:0:1) #should grab the first two digits
xx-=1
yy=$(var:2:1) #should grab the last digit
echo "You have chosen var $var, with X value $xx and Y value $yy"
运行后:
chmod 777 Cleanup1.sh
./Cleanup1.sh
我明白了:
./Cleanup1.sh[13]: rel:0:2: permission denied
./Cleanup1.sh[14]: xx-=1: permission denied
./Cleanup1.sh[15]: rel:2:1: permission denied
我正在通过OutsideView运行 OSS/Unix shell。任何帮助表示赞赏!
分析解答
一些东西:
- 你的意思是
${var:0:1}
,而不是$(var:0:1)
。后者尝试运行var:0:1
命令,该命令不存在并导致您出现错误消息。 - 第二个数字不是最后一个元素的索引,而是提取的字符串的长度,所以要获得前两个数字,需要
${var:0:2}
。 - 要获得最后一位数,您可以使用
${var: -1}
- 注意:
和-
之间的空格(需要Bash 4.3,我认为是1)。 - 使用子串的参数扩展是Bashism,因此
/bin/sh
可能无法做到 - 使用#!/bin/bash
或#!/usr/bin/env bash
作为你的shebang线。 xx-=1
尝试运行xx-=1
命令;如果你想将xx
减1,请改用((--xx))
或xx=$((xx-1))
。
1如果你没有Bash 4.3或更新版本,你可以使用它:
${var:${#var}-1}