Bash参数替换处理空格与换行符失效问题求助
Bash参数替换处理空白字符失效的解决方法
你遇到的问题根源在于:Bash参数替换里的?通配符仅匹配单个非空字符,空格、换行这类空白字符不会被它识别,因此替换时直接跳过了这些字符。下面是几种能正确处理所有字符(包括空格、换行)的解决方案:
方法一:Bash循环逐字符处理
利用read -n1逐个读取字符串的每个字符(包含空白和换行),拼接成目标格式:
str=" random string " result="" while IFS= read -r -n1 char; do result+=" '$char'" done < <(printf "%s" "$str") echo "$result"
方法二:使用sed命令
sed可以处理所有字符(包括换行),通过全局替换实现需求:
str=" random string " echo "$str" | sed -e 's/./ '\''&'\''/g' -e 's/^ //'
解释:第一个替换规则把每个字符替换为 '字符',第二个规则去掉开头多余的空格。
方法三:结合fold和awk处理
先用fold把字符串拆成每行一个字符,再用awk拼接成目标格式:
str=" random string " fold -w1 <<< "$str" | awk '{printf " '\''%s'\''", $0}' | sed 's/^ //'
内容的提问来源于stack exchange,提问作者DialFrost
相关产品推荐
相关产品推荐

