#!/bin/sh
read -p "Enter sequence: " seq
for char in $seq; do
echo "$char"
done
我从标准输入中读取"字符"序列。例如,让它为1234(),
我想将其更改为这样:
'1' '2' '3' '4' '(' ')' ','
我不想回声此序列。我需要它具有这个新价值。
在标准SH脚本中是否可以?
这与所有可打印的ascii字符(可能与任何不是nul字节的东西)一起使用,没有外部程序的帮助(printf
通常是内置的):
string="$(printf "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%%&'()*+,-./:;<=>?@[\]^_`{|}~ tnr")"
while [ -n "${string}" ]; do
character="$(printf '%c.' "${string}")"
character="${character%.}"
echo "Character: '${character}'"
string="${string#?}"
done
请注意格式字符串中的额外的非空格字符。我们需要它,以便命令替换不会剥离可能的LF
。
Character: '0'
Character: '1'
Character: '2'
Character: '3'
Character: '4'
Character: '5'
Character: '6'
Character: '7'
Character: '8'
Character: '9'
Character: 'a'
Character: 'b'
Character: 'c'
Character: 'd'
Character: 'e'
Character: 'f'
Character: 'g'
Character: 'h'
Character: 'i'
Character: 'j'
Character: 'k'
Character: 'l'
Character: 'm'
Character: 'n'
Character: 'o'
Character: 'p'
Character: 'q'
Character: 'r'
Character: 's'
Character: 't'
Character: 'u'
Character: 'v'
Character: 'w'
Character: 'x'
Character: 'y'
Character: 'z'
Character: 'A'
Character: 'B'
Character: 'C'
Character: 'D'
Character: 'E'
Character: 'F'
Character: 'G'
Character: 'H'
Character: 'I'
Character: 'J'
Character: 'K'
Character: 'L'
Character: 'M'
Character: 'N'
Character: 'O'
Character: 'P'
Character: 'Q'
Character: 'R'
Character: 'S'
Character: 'T'
Character: 'U'
Character: 'V'
Character: 'W'
Character: 'X'
Character: 'Y'
Character: 'Z'
Character: '!'
Character: '"'
Character: '#'
Character: '$'
Character: '%'
Character: '&'
Character: '''
Character: '('
Character: ')'
Character: '*'
Character: '+'
Character: ','
Character: '-'
Character: '.'
Character: '/'
Character: ':'
Character: ';'
Character: '<'
Character: '='
Character: '>'
Character: '?'
Character: '@'
Character: '['
Character: ''
Character: ']'
Character: '^'
Character: '_'
Character: '`'
Character: '{'
Character: '|'
Character: '}'
Character: '~'
Character: ' '
Character: ' '
Character: '
'
'haracter: '
对于长字符串,sed
可能会更快。
您可以用sed
(1)将字符串分开:
seq=`printf "%sn" "$seq" | sed 's/./ &/g'`