在 unix 中使用特殊字符运行 shell 脚本



我的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

我尝试将我的shell上传为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=

本地电脑编码:

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

您可以在设置LC_ALL=C后使用printf '%qn' CDACamp*.txt来查看文件名将以 7 位干净的 ASCII 字符集呈现的方式(因此,该字符集几乎可以在任何终端上正确呈现(。

如果输出为:

$'/cert/bcp/xcom/emic/CDACampa361a.txt'

。这是您可以放入脚本中的值(只要它以#!/bin/bash#!/usr/bin/env bash运行,而不是#!/bin/sh(:

cp $'/cert/bcp/xcom/emic/CDACampa361a.txt' localfolder

由于所涉及的所有字符都是 7 位干净的,因此无论您的终端是否正确支持 Unicode(或扩展 ASCII(,它们看起来都是一样的。

最新更新