Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 在Unix中不同时写入文件_Bash_File_Unix - Fatal编程技术网

Bash 在Unix中不同时写入文件

Bash 在Unix中不同时写入文件,bash,file,unix,Bash,File,Unix,变量中有字符串,我想将其从变量写入文件,但前提是此字符串和文件内容不同。您可以使用以下脚本: string="foo" # Use diff to check if the file's content and the variable differ # <(...) is called "process substitution" diff file <(cat <<< "$string") # diff returns 0 if both inputs ar

变量中有字符串,我想将其从变量写入文件,但前提是此字符串和文件内容不同。

您可以使用以下脚本:

string="foo"

# Use diff to check if the file's content and the variable differ
# <(...) is called "process substitution"
diff file <(cat <<< "$string")

# diff returns 0 if both inputs are the same
[ $? -ne 0 ] || cat <<< "$string" > file
string=“foo”
#使用diff检查文件的内容和变量是否不同
#
>echo hello world>文件
>>cat文件
你好,世界
>>str=“你好,世界”

>>如果[“$(diff file),则必须将文件内容存储在变量中,并检查变量是否相同。例如:

[[ "$var" != "$checkvar" ]] && echo "$var" >> file || echo "content same"
测试: 现在,如果文件很大,有很多行,那么这将变得更加混乱和复杂。变量中需要有显式的新行

$ var=jaypalsingh$'\n'jaypal     # Variable with new line
$ echo "$var"
jaypalsingh
jaypal
$ cat file
jaypalsingh
jaypal
$ checkvar=$(<file)
$ [[ "$var" != "$checkvar" ]] && echo "$var" >> file || echo "content same"
content same
$var=jaypalsingh$'\n'jaypal#带新行的变量
$echo“$var”
杰帕尔辛格
杰帕尔
$cat文件
杰帕尔辛格
杰帕尔
$checkvar=$(>文件| |回显“内容相同”
内容相同


[..]]周围加引号
是不需要的,但此处的使用将防止出现注释中建议的元字符。他还就
echo
的使用提出了另一个有效的观点。
printf
将更适合在此处生成变量。

为什么不直接编写它?是否需要保持修改时间不变?另外,请e显示您当前的尝试。@Levlevsky这可能是answer@LevLevitsky一般来说,您是对的,但在这种情况下,每次写入此文件时,我还必须连接网络接口。因此,我希望在必要时写入文件,但感谢您的评论。@user1825271该评论将此问题深入了”我们需要更多信息“territory”。问题已解决。我想感谢大家的帮助。这三个想法都很好。再次感谢:)这将查找名为
foo
的文件,并且不会将文件内容与字符串“foo”进行比较“+1表示最正确。您也可以使用
diff-q
cmp
来避免生成完整的修补程序,并且可以选择只在同一行上执行
&
,而不是单独检查
$?
谢谢您的建议!它们都是+1:)…我将保留我的答案,以便让其他人看到如何通过您的建议来改进它。(尽管在您告诉我之后,差异和最终的cat不在一行-加上| |-看起来不再令人满意…)如果
str=“-n”
str=“*”
str=“foo bar”,这是行不通的
@另一个人感谢你的提示,你有没有找到一种方法来挽救我的解决方案,使其能够正确处理这种特殊情况?你可以使用
printf“%s\n”$str而不是
echo$str
@另一个人谢谢你。每天学习新东西。:@thatotherguy谢谢,添加了引号。+1感谢他是一个纯粹的bash。然而,像这样使用
echo
意味着如果
var='-n'
@thatotherguy又一次提出了一个好的观点。
:)
已经添加了一个关于这一点和使用
printf的可能性的注释
。非常感谢您的反馈。感谢您改进了答案。此方法会使最后一行的换行符
$稍有不准确(如果
echo“$var”>>文件
发生IO故障,也可能会出现另一个问题。不太可能,但如果发生这种情况,可能会导致
echo“内容相同”
被调用。在这种情况下,
true
操作行可能出现错误时,使用
if..else
语句会更好。像
[[case]]&&true | | false
这样的表单在Bash中是可以接受的快捷方式,但在我看来,这一次表单是一个肮脏的表单。
$ var=jaypalsingh        # Create a variable
$ cat file               # Content of the file
jaypalsingh
$ checkvar=$(<file)      # Add the content of the file to variable
$ [[ "$var" != "$checkvar" ]] && echo "$var" >> file || echo "content same"
content same
$ var=jaypal
$ [[ "$var" != "$checkvar" ]] && echo "$var" >> file || echo "content same"
$ cat file
jaypalsingh
jaypal
$ var=jaypalsingh$'\n'jaypal     # Variable with new line
$ echo "$var"
jaypalsingh
jaypal
$ cat file
jaypalsingh
jaypal
$ checkvar=$(<file)
$ [[ "$var" != "$checkvar" ]] && echo "$var" >> file || echo "content same"
content same