在Unix中运行带有特殊字符的Shell脚本

时间:2018-10-09 15:39:33

标签: bash shell unix utf-8 char

我的shell脚本有麻烦的问题。它将文件从另一台服务器复制到其上。问题出在这里:

要复制的文件的名称中有一个特殊字符,例如:“CDACampaña”。但是,当我使用vi命令打开文件时,它看起来像CDACampaña.txt(当使用cat命令时,它看起来正确),并且当我运行日志时,显示文件在CDACampa之后不再可用了。

我的文件代码示例(此功能不起作用,请理解)

#Local machine
blabla code
cp //remote/CDACampaña.txt localfolder
bleble code

#Unix server vi command
blabla code
cp //remote/CDACampaña.txt localfolder
bleble code

#Unix log
blabla code
cp //remote/CDACampa

我尝试将外壳程序上传为UTF8,UTF8 WO BOOM,ANSI以及UNIX或WINDOWS eol,但是没有任何作用。

请问有什么想法吗?

已编辑:

Unix语言环境:

LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

本地PC编码:

IsSingleByte      : True
BodyName          : iso-8859-1
EncodingName      : Europeo occidental (Windows)
HeaderName        : Windows-1252
WebName           : Windows-1252
WindowsCodePage   : 1252
IsBrowserDisplay  : True
IsBrowserSave     : True
IsMailNewsDisplay : True
IsMailNewsSave    : True
EncoderFallback   : System.Text.InternalEncoderBestFitFallback
DecoderFallback   : System.Text.InternalDecoderBestFitFallback
IsReadOnly        : True
CodePage          : 1252

1 个答案:

答案 0 :(得分:2)

设置printf '%q\n' CDACamp*.txt后,可以使用LC_ALL=C来查看如何以7位纯净ASCII字符集呈现文件名(因此,几乎可以在任何终端上正确呈现的文件名)

如果输出为:

$'/cert/bcp/xcom/emic/CDACampa\361a.txt'

...这是您可以在脚本中输入的值(只要它与#!/bin/bash#!/usr/bin/env bash一起运行, #!/bin/sh):< / p>

cp $'/cert/bcp/xcom/emic/CDACampa\361a.txt' localfolder

由于涉及的所有字符都是7位纯净的,因此无论您的终端是否正确支持Unicode(或扩展ASCII),它们的外观都相同。