这个
STR="Hello\nWorld"
echo $STR
Run Code Online (Sandbox Code Playgroud)
产生输出
Hello\nWorld
Run Code Online (Sandbox Code Playgroud)
代替
Hello
World
Run Code Online (Sandbox Code Playgroud)
如何在字符串中添加换行符?
注意:这个问题不是关于回声.
我知道echo -e,但我正在寻找一种解决方案,允许将一个字符串(包括换行符)作为参数传递给其他命令,这些命令没有类似的选项来解释\n为换行符.
有人能告诉我是否应该在shell脚本中包含变量的引号?
例如,以下是正确的:
xdg-open $URL
[ $? -eq 2 ]
Run Code Online (Sandbox Code Playgroud)
要么
xdg-open "$URL"
[ "$?" -eq "2" ]
Run Code Online (Sandbox Code Playgroud)
如果是这样,为什么?
我在远程计算机上有一个java程序Desktop/testfolder/xyz.jar.
它还在同一文件夹上有一个配置文件.当我SSH到机器时,我做:
Desktop/testfolder/xyz.jar
这里的问题是配置文件不在路径中,因为我们在主文件夹中,所以我的程序无法读取配置.
所以我想首先进入该文件夹,然后从该文件夹运行该程序.如果我这样做,在shell脚本中
"ssh user@remote java -cp Desktop/testfolder/xyz.jar Main"
Run Code Online (Sandbox Code Playgroud)
它执行第一个语句,当第二个语句运行时,它在我当前的机器而不是远程机器上运行.
我们可以只执行一个命令,还是有其他解决方案?
谢谢Lalith
bash有一个很好的功能,关于本地化(语言翻译):
TEXTDOMAIN=coreutils
LANG=fr_CH.utf8
echo $"system boot"
démarrage système
Run Code Online (Sandbox Code Playgroud)
(注意:对于这项工作,fr_CH.utf8已经在您的系统上生成了......否则您可以尝试使用自己的语言环境...或者安装locales并生成一个.)
问题:
但是如果这对于简单的字符串工作正常,那么当字符串包含一个\n(或者最坏的:一个反引号时,`事情会更复杂:
echo $"Written by %s, %s, %s,\nand %s.\n"
Written by %s, %s, %s,\nand %s.\n
Run Code Online (Sandbox Code Playgroud)
这不是参加的答案.
(Nota2:对于这项工作,必须在消息文件中准备确切的消息.mo,在此示例/测试中,我使用的是existant coreutils.mo文件,可以使用该命令取消格式化msgunfmt.)
总之,我发现进行翻译的唯一方法是:
eval echo \$\"$'Written by %s, %s, %s,\nand %s.\n'\"
Écrit par %s, %s, %s,
et %s.
Run Code Online (Sandbox Code Playgroud)
要么
msg=$'Written by %s, %s, %s,\nand %s.\n'
eval echo \$\""$msg"\"
Écrit par %s, %s, %s, …Run Code Online (Sandbox Code Playgroud) 我已经阅读了尝试在bash中的变量中嵌入换行符,我想我理解换行符作为IFS,以及bash有时如何将换行符更改为空格,但我不明白这种情况:
[prompt]$ blah="$(printf "hi\n\n\n\n")"
[prompt]$ echo "$blah"
hi
[prompt]$ blah="$(printf "hi\n\n\n\nx")"
[prompt]$ echo "$blah"
hi
x
Run Code Online (Sandbox Code Playgroud)
为什么第一个回声没有吐出一堆新行?谢谢.
设定后:
var1="a\nb"
var2="$var1"
Run Code Online (Sandbox Code Playgroud)
我期待$var1并且$var2平等; 然而:
[[ $var1 == $var2 ]] && echo yes || echo no
Run Code Online (Sandbox Code Playgroud)
回报no.这是为什么?
我尝试过命令替换,但用空格替换'\n'
$ export GREENIE="$(python -c 'print "\n\r"*4')"
$ echo $GREENIE |hexdump
0000000 200d 200d 200d 0a0d
0000008
$
Run Code Online (Sandbox Code Playgroud)
我只需要这样:
$ echo $GREENIE |hexdump
00000000 0a0d 0a0d 0a0d 0a0d
00000008
$
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我有一个bash脚本,我有一些字符串\n:
interfaces="auto lo\niface lo inet loopback\n\n..."
Run Code Online (Sandbox Code Playgroud)
然后我尝试将其写入interfaces文件,如下所示:
sudo bash -c "echo -e $interfaces > /etc/network/interfaces"
Run Code Online (Sandbox Code Playgroud)
我-e用来显示\n's但是如果我打开文件它没有正确显示但如果我只是将它输出到终端它的工作原理:
auto loniface lo inet loopbacknn...
bash ×6
linux ×2
newline ×2
shell ×2
if-statement ×1
java ×1
localization ×1
quotes ×1
raspberry-pi ×1
sh ×1
ssh ×1
unix ×1
variables ×1