Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux sh中的子字符串返回“;“不良替代”;_Linux_Bash_Substring_Sh - Fatal编程技术网

Linux sh中的子字符串返回“;“不良替代”;

Linux sh中的子字符串返回“;“不良替代”;,linux,bash,substring,sh,Linux,Bash,Substring,Sh,在此代码中: #!/bin/sh a='sdsdsd' c=${a:0:1} 我使用第二行逐个读取字符串的字节(在循环中),但它在sh中返回错误(“sh:3:Bad substitution”)。 有没有办法在sh模式下进行? 出于某些原因,我应该使用sh(而不是bash,我知道bash会很好)子字符串参数扩展不属于。这是一个ksh/bash特性。如果您需要它,您不能使用#/bin/sh 如果需要使用sh,则需要调出expr $ dash -c ' a="ABCDEF" i=1

在此代码中:

#!/bin/sh
a='sdsdsd'
c=${a:0:1}
我使用第二行逐个读取字符串的字节(在循环中),但它在sh中返回错误(“sh:3:Bad substitution”)。 有没有办法在sh模式下进行?
出于某些原因,我应该使用sh(而不是bash,我知道bash会很好)

子字符串参数扩展不属于。这是一个ksh/bash特性。如果您需要它,您不能使用
#/bin/sh

如果需要使用
sh
,则需要调出
expr

$ dash -c '
    a="ABCDEF"
    i=1
    while [ "$i" -le "${#a}" ]; do
        c=$(expr substr "$a" "$i" 1)
        echo "$i:$c"
        i=$((i + 1))
    done
'
1:A
2:B
3:C
4:D
5:E
6:F

子字符串参数展开不属于该函数的一部分。这是一个ksh/bash特性。如果您需要它,您不能使用
#/bin/sh

如果需要使用
sh
,则需要调出
expr

$ dash -c '
    a="ABCDEF"
    i=1
    while [ "$i" -le "${#a}" ]; do
        c=$(expr substr "$a" "$i" 1)
        echo "$i:$c"
        i=$((i + 1))
    done
'
1:A
2:B
3:C
4:D
5:E
6:F

带posix外壳,不带expr

#/垃圾箱/垃圾箱
var='abcd'
count=“${var}”
直到[“$count”-等式0];做
vartemp=“${var#[a-z]}”
lavar=“${var%$vartemp}”
var=“$vartemp”
count=“$((count-1))”
echo“$var$count$lavar”
完成

带posix外壳,不带expr

#/垃圾箱/垃圾箱
var='abcd'
count=“${var}”
直到[“$count”-等式0];做
vartemp=“${var#[a-z]}”
lavar=“${var%$vartemp}”
var=“$vartemp”
count=“$((count-1))”
echo“$var$count$lavar”
完成

在这种情况下,我没有任何类似cut的命令。@奥利弗他们多次清楚地说明他们正在使用sh,您希望得到什么输出?
/bin/sh
不支持
${name:offset:length}
expansion。在这种情况下,我没有任何像cut这样的命令。@oliv他们多次清楚地说明他们正在使用sh您期望的输出是什么?
/bin/sh
不支持
${name:offset:length}
expansion。您能告诉我vartemp=“${var#[a-z]}”,我不明白!:(我找到了!:)“${string#regex}-从字符串开头删除最短的匹配子字符串”和about-lavar=“${var%$vartemp}”->${string%substring}:从$string.Nice的后面删除$substring的最短匹配。如果您只需要第一个字符,即使它不是一个字母,那么
${var#?}
您能告诉我关于vartemp=“${var#[a-z]}”的情况吗?我不明白(我找到了!:)“${string#regex}-从字符串开头删除最短的匹配子字符串”和about-lavar=“${var%$vartemp}”->${string%substring}:从$string.Nice的后面删除$substring的最短匹配。如果您只需要第一个字符,即使它不是字母,那么
${var#?}