English 中文(简体)
处理变数和新线,并在印本中引用
原标题:Dealing with variables and new lines, and quoting in a bash script

我要将以下野蛮指挥自动化。 请注意,这一指挥系统在从指挥线签发的飞机上产生了预期结果—— 乌班图10.04, svn 1.6.6, bash Shell:

svn ci -m $ Added new File: newFile.txt
Orig loc: /etc/networking/newFile.txt  /home/user/svnDir/newFile.txt

我愿用双管齐下,假设档案的原始完整道路载于可变的单价中,档案名称为FileName美元。 该书由vn名录执行。 我需要允许档案名称和途径包含空间的可能性。

因此,我手稿中的线索可能包括:

svn ci -m$ Added new file: ${oFileName}
Orig loc: ${oFileFull}  ${oFileName}

但是,我希望在指挥工作完成之前扩大变量(可能包含空间),我无法说明如何这样做,而同时在单一报价中提出必须的vn评论,以便在颠覆评论记录中找到新的线。 我正在把我的头发拉出来,试图说明如何适当引用和汇集这一指挥。 感谢任何帮助。


  • The following was posted as an answer, but should have been an edit.

@Dennis:

既然如此,我很难总结一下我的头脑,如果有人能向我提出一个在线资源,明确和简明地解释这一点,我会爱我。 我发现的那些人没有为我清除地雷。

我最近的混乱根源如下:

#!/bin/bash
nl=$ 
 
msg="Line 1${nl}Line 2"
echo $msg        # ouput = Line 1 Line 2
echo -e $msg     # ouput = Line 1 Line 2
echo "$msg"      # output = Line 1
                 # Line 2

我想要说明的是,在变数的美元上,有两倍的报价,将产出分成两行,没有两字,即便是开关,也没有新行。

为什么需要双重报价——为什么在分配时将美元变量作为微薄变量的一部分而扩大?

我希望我不要回答我自己的问题,而承诺一个StackOverflow faux pas。 事实上,我不是真的回答,而只是回应你的意见。 我不能作出必要的评论。

最佳回答

假设你的新路线是变数,在你需要新线的地方使用变量,并改变你大体的引语,以翻一番。 您也应当始终引用任何包含档案名称的变量。

nl=$ 
 
svn ci -m"Added new file: ${oFileName}${nl}Orig loc: ${oFileFull}" "${oFileName}"
问题回答

@Scott, 我知道这一点已经得到了回答,但这里对你关于重复使用和重复“ms”之间差别的额外问题有一些评论。 阁下:

nl=$ 
 
msg="Line 1${nl}Line 2"
echo $msg        # ouput = Line 1 Line 2
echo -e $msg     # ouput = Line 1 Line 2
echo "$msg"      # output = Line 1
                 # Line 2

它确实有助于了解每起案件中有多少人向对应指挥部提出诉讼。 争论不休。 除最后一份产出外,每份产出均以单一空间书写。

在第一个例子中,复数为美元,用你为之规定的特性(其中一条是新路线)来取代。 然后,在援引“”之前,使用“内地”(IFS)分裂成多个论点,因此,提出的论点清单可以重复。 否则,国际不动产业会被安排到白色空间(空间、表格和新路线),因此,空壳会把你打成四个论点:“Line”、“1”、“Line”和“2”。 甚至连新线都看不见,因为空壳就认为它是一个分离者,就像一个空间。

在第二个例子中,反响——例如,反响指挥部收到5个论点:“-e”、“Line”、“1”、“Line”、“2”。 这种论点告诉指挥部,它会扩大在其论点中看到的任何反弹性质,但没有任何反响,因此没有改变论点。 其结果与第一个例子相同。

在最后一个例子中,你重复了“美元”的字句,以扩大<条码>mg,将其内容改为but/strong>,以把双引标之间的一切作为理由对待,因此,我们赞同一个论点,即载有信函、数字、空间和新线的说明。 它赞同这样的说法,即“Line 1”和“Line 2”完全是按不同的行文。

进行这一试验:使爱幼学校像信一一样,陷入某种任意的境地,并观察其如何以不同方式分裂你:

nl=$ 
 
msg="Line 1${nl}Line 2"
IFS=i
echo $msg        # ouput = L ne 1
                 # L ne 2

There s nothing especially magical about whitespace. Here, because of the weird IFS, the shell treats the letter i as a separator but not the spaces or newlines. So echo receives three arguments: "L", "ne L", and "ne 2". (I m showing the newline character as , but it s really just a single character, like X or p or 5.)

一旦你认识到,空壳指挥线上的单一和双重引号都涉及为指挥构思,逻辑就开始变得有意义。

Bash将压缩邻近的引述章节。 例如

$ r=rooty
$ t=tooty
$ echo $r$ 
 $t
rooty
tooty
$ echo "$r $r"$ 
 $t
rooty rooty
tooty

对在线指南而言,先进的双面打字指南可能有用,但比阅读长、详细手册好。 我建议使用手法(第7.2版的标准,如果不是较早的版本),来编造血压手册,然后使用斜体的夹,以便你能够浏览其历史。 假设你没有时间和耐心,从一开始到尾读所有3300条线路。





相关问题
Parse players currently in lobby

I m attempting to write a bash script to parse out the following log file and give me a list of CURRENT players in the room (so ignoring players that left, but including players that may have rejoined)...

encoding of file shell script

How can I check the file encoding in a shell script? I need to know if a file is encoded in utf-8 or iso-8859-1. Thanks

Bash usage of vi or emacs

From a programming standpoint, when you set the bash shell to use vi or emacs via set -o vi or set -o emacs What is actually going on here? I ve been reading a book where it claims the bash shell ...

Dynamically building a command in bash

I am construcing a command in bash dynamically. This works fine: COMMAND="java myclass" ${COMMAND} Now I want to dynamically construct a command that redirectes the output: LOG=">> myfile.log ...

Perform OR on two hash outputs of sha1sum

I want perform sha1sum file1 and sha1sum file2 and perform bitwise OR operation with them using bash. Output should be printable i.e 53a23bc2e24d039 ... (160 bit) How can I do this? I know echo $(( ...

Set screen-title from shellscript

Is it possible to set the Screen Title using a shell script? I thought about something like sending the key commands ctrl+A shift-A Name enter I searched for about an hour on how to emulate ...