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#?}