if[-n] 、tr的用法

本文介绍了在Shell脚本中使用if条件语句进行字符串判断的方法,如非空判断、相等与不等判断。接着详细讲解了tr命令的用法,包括字符替换、删除、压缩重复字符以及ROT13加密算法的实现。tr命令只能通过标准输入接受数据,并展示了如何利用tr删除或替换字符串中的特定字符。最后,文章提到了if-e和if-f的区别,用于检查文件是否存在及其类型。
摘要由CSDN通过智能技术生成

if [ -n ] 正确使用方法

if [ str1 = str2 ]       当两个串有相同内容、长度时为真 
if [ str1 != str2 ]      当串str1和str2不等时为真 
if [ -n str1 ]       当串的长度大于0时为真(串非空) 
if [ -z str1 ]        当串的长度为0时为真(空串) 
if [ str1 ]         当串str1为非空时为真

shell 中利用 -n 来判定字符串非空。
 

tr命令


1. tr 命令的使用


1.It can be used to perform substitution of characters,deletion of the characters, and squeezing of repeated characters from the standard input.
2.tr accepts input only through stdin (standard input) and cannot accept input through command-line arguments.【tr命令仅仅支持标准输入,不支持参数输入】
3.tr [options] set1 set2【如果set1 和 set2的长度不等,那么就会出现映射不匹配问题。】
4.ROT13 is a well-known encryption algorithm. The ROT13 scheme performs alphabetic rotation of characters for 13 characters.【ROT13 是一个著名的加密算法。字母往后13的字母就是加密后的字符】


如下这个就是使用ROT13作为加密算法使用,同时使用tr命令测试

[root@server4 backup]# echo "tr came, tr saw, tr conquered." | tr 'a-zA-Z' 'n-za-mN-ZA-M'
ge pnzr, ge fnj, ge pbadhrerq.
1
2


将文件file.txt中的内容作为tr命令的输入,然后将其中的空格转换成+

[root@server4 backup]# tr ' ' '+' < file.txt
hello+spark+\n+hello+hadoop
hello+hive
1
2
3


-d 参数


tr has an option -d to delete a set of characters that appear on stdin by using the specified set of characters to be deleted as follows:

$ cat file.txt | tr -d '[set1]'
#Only set1 is used, not set2【只需要使用set1,不需要参数set2】
1
2


将字符串中的指定内容删除

[root@server4 backup]# echo "hello 123 world 456" | tr -d '0-9'
hello  world 
1
2


-c 参数


Here,the complement set is the set containing all numerals,space characters,and newline characters.All other characters are removed since -d is used with tr.
-c参数指定的集合会被保留
 

[root@server4 backup]# echo hello 1 char 2 next 4 | tr -d -c '0-9 \n'
 1  2  4


Here,the complement set is the set containing all numerals,space characters,and newline characters.All other characters are removed since -d is used with tr.
1
2
3


-s 参数
压缩重复的字符。
tr provides the -s option to squeeze repeating characters from the input.
$[ operation ] performs a numeric operation

[root@server4 shells]# cat sum.txt | echo $[ $(tr '\n' '+') 0 ]
15

Difference between 'if -e' and 'if -f'

[ -e FILE ] True if FILE exists.

This will return true for both /etc/hosts and /dev/null and for directories.

[ -f FILE ] True if FILE exists and is a regular file.

This will return true for /etc/hosts and false for /dev/null (because it is not a regular file), and false for /dev since it is a directory.

<think>好的,我需要回答用户关于如何在Qt中正确使用TR函数进行国际化处理的问题。首先,我得回忆一下Qt的国际化机制,特别是tr()函数的作用和使用方法。根据用户提供的引用内容,tr()函数用于标记需要翻译的文本,然后通过生成.ts文件,使用Qt Linguist进行翻译,最后生成.qm文件供应用程序加载。 首先,应该分步骤说明如何使用tr()函数。第一步是在代码中用tr()包裹所有用户可见的字符串,例如按钮的文本或标签。这时候需要确保所有字符串都是通过tr()传递的,比如`button.setText(tr("Submit"))`。同时要注意,tr()是QObject的成员函数,所以如果是在非QObject子类中使用,可能需要使用Q_DECLARE_TR_FUNCTIONS宏来声明,或者使用QCoreApplication::translate()函数。 接下来,需要说明如何生成翻译文件。用户提到使用lupdate工具提取源代码中的tr()字符串,生成.ts文件。这通常是通过在.pro文件中添加TRANSLATIONS += myapp_zh_CN.ts,然后运行lupdate命令。之后,用Qt Linguist打开.ts文件进行翻译,填写对应的目标语言字符串。完成后,使用lrelease将.ts文件编译成.qm文件。 然后,在应用程序启动时加载.qm文件。这部分需要说明如何使用QTranslator加载翻译文件,并安装到应用程序中。例如: QTranslator translator; if (translator.load("myapp_zh_CN.qm", ":/i18n")) { app.installTranslator(&translator); } 此外,需要注意的一些常见问题,比如动态字符串的处理,可能需要使用arg()方法进行参数替换,或者使用QT_TR_NOOP宏标记在数组中的字符串。还有上下文的问题,tr()函数的上下文默认是类名,但有时候可能需要指定不同的上下文,这时候可以使用QCoreApplication::translate()函数并明确指定上下文。 还要提到在非QObject派生类中使用tr()的情况,比如全局函数或静态类,需要使用Q_DECLARE_TR_FUNCTIONS来添加tr()的支持。此外,在QML中使用qsTr()而不是tr(),这也是Qt国际化的另一个部分,但用户的问题可能集中在C++部分。 最后,应该提醒用户确保在.pro文件中启用翻译支持,比如添加CONFIG += console,但可能不需要,具体取决于项目配置。同时,在代码中正确包含必要的头文件,如QTranslator和QApplication。 可能还需要提到测试翻译的方法,比如切换应用程序的语言环境,或者动态重新加载翻译文件。此外,处理复数形式可能需要使用tr()的复数形式参数,例如`tr("%n item(s)", "", count)`,这样Qt Linguist可以正确处理不同数量的复数形式。 总结下来,步骤大致分为:标记字符串、生成翻译文件、翻译、编译和加载翻译文件。同时需要注意上下文、动态字符串、非QObject类的使用,以及测试和复数处理等问题。根据用户提供的引用,尤其是引用[1][2][3][4],需要将这些内容整合成一个结构清晰的回答,并生成相关问题。</think>在Qt中使用`tr()`函数进行国际化处理需要遵循以下步骤: ### 一、标记可翻译文本 1. **在代码中使用`tr()`包裹字符串** 所有用户可见的文本(如按钮标签、窗口标题等)必须用`tr()`标记。例如: ```cpp QPushButton *button = new QPushButton(tr("Submit")); // 标记按钮文本为可翻译 ``` - **注意**:`tr()`是`QObject`的成员函数。若在非`QObject`派生类(如工具类)中使用,需通过宏`Q_DECLARE_TR_FUNCTIONS`声明支持[^3]。 2. **处理动态字符串** 若字符串包含动态内容(如变量),使用`QString::arg()`占位: ```cpp QString message = tr("File %1 not found").arg(fileName); // 动态插入文件名 ``` --- ### 二、生成翻译文件 1. **配置.pro文件** 在Qt项目文件(.pro)中添加翻译文件路径: ```pro TRANSLATIONS += myapp_zh_CN.ts # 中文翻译文件 ``` 2. **提取可翻译文本** 运行`lupdate`工具扫描代码中的`tr()`字符串并生成.ts文件: ```bash lupdate project.pro # 生成或更新.ts文件 ``` --- ### 三、翻译文本 1. **使用Qt Linguist编辑.ts文件** 打开.ts文件,逐条填写目标语言翻译(如中文): - 若未安装Linguist,可通过Qt Creator菜单操作:**工具 → 外部 → Qt语言家 → 更新翻译**[^4]。 2. **编译为.qm文件** 翻译完成后,使用`lrelease`将.ts文件编译为二进制.qm文件: ```bash lrelease project.pro # 生成.qm文件 ``` --- ### 四、加载翻译文件 在应用程序启动时加载.qm文件: ```cpp #include <QTranslator> #include <QApplication> int main(int argc, char *argv[]) { QApplication app(argc, argv); QTranslator translator; if (translator.load("myapp_zh_CN.qm", ":/i18n")) { // 从资源文件加载 app.installTranslator(&translator); // 安装翻译器 } // 创建主窗口并显示 return app.exec(); } ``` --- ### 常见问题与解决 1. **翻译未生效** - 检查.qm文件路径是否正确。 - 确保`QTranslator`对象在`QApplication`之后创建[^1]。 2. **处理复数形式** 使用`tr()`的复数参数: ```cpp tr("%n item(s)", "", itemCount); // 根据itemCount自动选择单复数形式 ``` 3. **非界面类翻译** 在静态工具类中使用`QT_TR_NOOP`宏标记字符串,后续通过`tr()`引用: ```cpp const char *messages[] = { QT_TR_NOOP("Hello"), QT_TR_NOOP("World") }; QString text = tr(messages[0]); // 实际翻译 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值