初学者用户在这里。我已将用户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}