相关疑难解决方法(0)

将包含空字符(\ 0)的字符串分配给Bash中的变量

在尝试通过使用NULL字符作为分隔符来正确处理文件//foldernames列表(请参阅我的其他问题)时,我偶然发现了Bash的一个奇怪的行为,我不明白:

将包含一个或多个NULL字符的字符串分配给变量时,将丢失/忽略/不存储NULL字符.

例如,

echo -ne "n\0m\0k" | od -c   # -> 0000000   n  \0   m  \0   k
Run Code Online (Sandbox Code Playgroud)

但:

VAR1=`echo -ne "n\0m\0k"`
echo -ne "$VAR1" | od -c   # -> 0000000   n   m   k
Run Code Online (Sandbox Code Playgroud)

这意味着我需要将该字符串写入文件(例如,在/ tmp中),如果不希望或不可行直接管道,则从那里读回.

Z shell(zsh)中执行这些脚本时,在两种情况下都会保留包含\ 0的字符串,但遗憾的是我不能假设在运行我的脚本的系统中存在zsh而Bash应该是.

如何在不丢失任何(元)字符的情况下有效地存储或处理包含\ 0字符的字符串?

bash null-character

26
推荐指数
3
解决办法
3万
查看次数

如何使用“查找”在名称中包含空格的目录中搜索文件?

如何使用find?在名称中包含空格的目录中搜索文件?我使用脚本

#!/bin/bash
for i in `find "/tmp/1/" -iname "*.txt" | sed 's/[0-9A-Za-z]*\.txt//g'`
do
    for j in `ls "$i" | grep sh | sed 's/\.txt//g'`
    do
        find "/tmp/2/" -iname "$j.sh" -exec cp {} "$i" \;
    done
done
Run Code Online (Sandbox Code Playgroud)

但是不处理名称中包含空格的文件和目录?

linux bash shell sed find

3
推荐指数
1
解决办法
4708
查看次数

bash"read -a"在null分隔的字符串变量上循环

我一直在阅读这篇文章:bash"for in"循环null分隔的字符串变量 ,看看我是否能够处理包含数组内部空格的任意文本.

基于上面的帖子,这很好:

while IFS= read -r -d '' myvar; do echo $myvar; done < <(find . -type f -print0)
Run Code Online (Sandbox Code Playgroud)

为了检查我的理解,我也做了这个(它仍然可以正常工作):

while IFS= read -r -d '' myvar; do echo $myvar; done < <(printf "%s\0" 'a b' 'c d')
Run Code Online (Sandbox Code Playgroud)

但是,然后我尝试将输出存储在数组中,这是错误的:

IFS= read -r -d '' -a myvar < <(printf "%s\0" 'a b' 'c d')
Run Code Online (Sandbox Code Playgroud)

该数组仅包含a b而不是c d:

echo ${myvar[@]}
a b
Run Code Online (Sandbox Code Playgroud)

显然,我在这里缺少一个更精细的细节.谢谢你的帮助.

PS.我在跑步:

GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin14)
Copyright (C) 2007 Free Software Foundation, …
Run Code Online (Sandbox Code Playgroud)

arrays bash delimiter null-character

3
推荐指数
1
解决办法
924
查看次数

标签 统计

bash ×3

null-character ×2

arrays ×1

delimiter ×1

find ×1

linux ×1

sed ×1

shell ×1