AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题

问题[quoting](unix)

Martin Hope
Donghua Liu
Asked: 2024-05-31 14:27:56 +0800 CST

如何在 bash 中转义单引号和感叹号

  • 5

我有一个很长的命令,我只想用它alias来缩短它。但该命令包含单引号和感叹号。

原点命令是ldapsearch -x -H ... -w 'abc!123'.

我尝试过alias search='ldapsearch -x -H ... -w \'abc!123\''或者alias search="ldapsearch -x -H ... -w 'abc!123'"等等。但它们都不适合我。

quoting
  • 2 个回答
  • 31 Views
Martin Hope
jesse_b
Asked: 2022-06-03 09:55:32 +0800 CST

什么是大引号,我可以在我的代码中使用它们吗?

  • 8

不知何故,花引号进入了我的代码,我得到了意想不到的行为

#!/bin/sh

if [ foo = ‘foo’ ]; then
   echo yes
else
   echo no
fi

我希望这会回应“是”,但它会回应“否”。

shell-script quoting
  • 1 个回答
  • 1467 Views
Martin Hope
Alex
Asked: 2022-05-19 03:09:12 +0800 CST

如何正确使用 bash 函数的引号?

  • 2

我正在尝试在我的.bashrc文件中定义以下 bash 函数:

function myfind() {
    find $1 -not -path venv -not -path .tox -name "$2" | xargs grep -n "$3"
}

这不是我所期望的。当我使用该功能搜索文件中的文本时,例如

myfind . *.py test

它不返回任何东西。但是当我直接使用表达式时,即

find . -not -path venv -not -path .tox -name "*.py" | xargs grep -n "test"

它返回一些匹配项。

我已经尝试使用双引号,例如

function myfind() {
    find $1 -not -path venv -not -path .tox -name '"$2"' | xargs grep -n '"$3"'
}

或者

function myfind() {
    find $1 -not -path venv -not -path .tox -name "'$2'" | xargs grep -n "'$3'"
}

并试图逃避像

function myfind() {
    find $1 -not -path venv -not -path .tox -name \"$2\" | xargs grep -n \"$3\"
}

但这些似乎都不起作用。

如何修复这个 bash 函数,以便在参数周围“使用”引号?

bash quoting
  • 1 个回答
  • 247 Views
Martin Hope
edublog
Asked: 2022-04-16 06:56:04 +0800 CST

寻找匹配的'''时出现意外的EOF

  • 0

我创建了一个脚本来将 CSV 数据导出到 mysql 表。

#!/bin/bash

cd /data/NEW
for f in User*
do
        mysql --user="root" --password="user@123" -e "LOAD DATA LOCAL INFILE  '/data/NEW/"$f"' ignore into table new.table2 fields terminated by ',' enclosed by '"' lines terminated by '\n' (table_date, table_name, table_count);"

done

但我收到以下错误。但我找不到我在哪里搞砸了。

test.sh: line 6: unexpected EOF while looking for matching `''
test.sh: line 9: syntax error: unexpected end of file

有人可以告诉我哪里可以改进吗?

shell-script quoting
  • 2 个回答
  • 1241 Views
Martin Hope
Gary Czychi
Asked: 2022-04-07 04:26:44 +0800 CST

递归重命名文件名中的撇号(Bash)

  • 3

需要从文件中删除撇号。我尝试了几种方法,也来自Stackexchange。

我在 Synology NAS 上,所以我没有 Python 或 Perl,而且我必须排除某些目录(查找 -prune)。

以下 find 命令似乎在测试期间通常有效(使用 echo):

find . -depth \( -type d -name "@*" -o -name "*#recycle*" -o -name "*SynoResource*" -prune \) -o \( -name "*\'*" -execdir bash -c 'for f; do echo mv ${f/\\\'/\\\\'} `echo $f | sed 's/\\\'/X/g'`; done' _ {} + \)

对于像“911's.zip”这样的文件,将撇号 ' 替换为 X 会生成以下结果(使用上面的命令):

mv ./911's.zip ./911Xs.zip

当我删除“echo”以执行命令时,出现以下错误:

mv: target '911Xs.zip' is not a directory

在交互式 shell 中,我可以使用以下命令重命名文件:

mv 911\'s.zip 911Xs.zip

当然,我曾试图逃避 ' (即使有几个 \,如 in ${f/\'/X}),但它不起作用。

任何想法?

非常感谢,

加里

bash quoting
  • 1 个回答
  • 98 Views
Martin Hope
kjo
Asked: 2022-03-25 09:36:06 +0800 CST

在命令行上测试失败(正确),但在脚本中成功(错误地)

  • 2

为了这个问题,假设 glob/a/b/c/*不产生匹配项。

这意味着以下测试应该失败(换句话说,它应该产生一个非零$?):

[[ -n /a/b/c/*(#qN) ]]

如果我直接在 (zsh) 命令行上运行测试,实际上就是这种情况。但是,如果我在脚本中粘贴完全相同的测试,它会成功,这不是预期的行为。

如果我使用标志运行相同的脚本-x,则生成的跟踪将测试显示为

[[ -n '/a/b/c/*(#qN)' ]]

我不明白为什么单引号出现在 test 的参数周围;在脚本的源代码中根本没有引号。

如果 zsh 自动插入这些单引号,这就解释了为什么文本会成功。

问题:

  1. 为什么此表达式的命令行版本和脚本版本之间存在差异?
  2. 我需要做什么才能使测试(正确)在脚本中失败?
zsh quoting
  • 2 个回答
  • 46 Views
Martin Hope
BrainStone
Asked: 2022-02-04 15:19:26 +0800 CST

zsh 的 `print -P` 的转义变量

  • 2

我正在寻找一种方法来转义包含格式说明符和特殊字符(如引号、反斜杠和换行符)的变量,以便在将其传递给print -P它时会按字面意思打印出来。

所以基本上我希望这两个打印相同:

> cat file.txt
> my_var="$(cat file.txt)"
> print -P "${<magic>my_var}"

我使用的测试用例的一个很好的示例文件是:

Backslash \
Double Backslash \\

Single Quote '
Double Quote "

-----------------------
Escaped Linebreak \n
-----------------------

Color codes: %F{red}not red%f

Variable expansion $SHELL

我得到的最接近的是${${(q+)my_var}//\%/%%},尽管引号、换行符、反斜杠和变量扩展存在问题:

$'Backslash Double Backslash \

Single Quote '
Double Quote "

-----------------------
Escaped Linebreak \n
-----------------------

Color codes: %F{red}not red%f

Variable expansion /usr/bin/zsh'

我知道printf '%s\n' "$my_var"。但是在实践中,print -P变量周围有很多实际的格式,所以这对我没有用。print -P遗憾的是,围绕变量和实际变量使用printf也不起作用,因为在某些情况下,字符串操作被应用于变量的内容。

zsh quoting
  • 2 个回答
  • 94 Views
Martin Hope
John Smith
Asked: 2022-01-29 10:13:09 +0800 CST

为什么在这个 Bash 脚本中不执行 `else` 分支(for 循环遍历数组)?

  • 2

以下代码旨在查找~/Downloads. 我用. ./script.sh. 即使用户提交的名称不完整,它也会找到它们。

#!/usr/bin/bash

echo -e "\nGive me the name of a nonexitent directory and I will look for it in ~/Downloads?\n"

read word

TOGOs=("$(find ~/Downloads -maxdepth 1 -iname "*$word*" -type d -execdir echo {} + | sed 's;./;/home/smith/Downloads/;g')"
"")
for togo in ${TOGOs[@]}
do
  if [[ $togo != "" ]]; then
    echo $togo
    export togo && cd $togo && return 0
  else
    echo "Haven't found it in ~/Downloads ." && cd ~/Downloads #This line does not work
  fi
done

该if部分按预期工作 - 当我给它一个名称/子目录名称的一部分时~/Downloads/,但是else当我给它一个不存在的目录时,该块的部分永远不会被执行。else当我摆脱循环时,我可以执行该部分,如下所示:

#!/usr/bin/bash

echo -e "\nGive me the name of a nonexitent directory and I will look for it in ~/Downloads?\n"

read word
TOGO=$(find ~/Downloads -maxdepth 1 -iname "*$word*" -type d -execdir echo {} + | sed 's;./;/home/smith/Downloads/;g')

if [[ $TOGO != "" ]]; then
  echo $TOGO
  export TOGO 
  cd $TOGO && return 0
else

  echo "Haven't found it in ~/Downloads." && cd ~/Downloads
fi

为什么else当我摆脱循环时手臂会被执行?如何在保留循环的同时执行我的代码?

bash quoting
  • 1 个回答
  • 34 Views
Martin Hope
Sergei Morozov
Asked: 2021-09-25 17:23:07 +0800 CST

在 Makefile 中转义“所有先决条件”变量

  • 0

假设我们有几个在 shell 中使用时需要引用其名称的文件:

echo A > 'a.$A'
echo B > 'b.$B'

并且有一个 Makefile,其规则取决于这些文件:

all: a.$$A b.$$B
    cat $+

以上内容适用于名称简单的文件,但适用于它生成的示例中的文件:

cat a.$A b.$B
cat: a.: No such file or directory
cat: b.: No such file or directory

看起来 shell 将$Aand$B表达式扩展为空字符串。

如果我将变量引用为cat '$+',则会阻止扩展,但所有先决条件都作为单个参数传递:

cat 'a.$A b.$B'
cat: 'a.$A b.$B': No such file or directory

根据文档,这是一个单一参数的事实是可以预料的:

所有先决条件的名称 […],它们之间有空格。

问题是,有没有办法将所有先决条件作为单独的论据来引用它们?

shell quoting
  • 1 个回答
  • 567 Views
Martin Hope
will
Asked: 2020-03-05 22:37:22 +0800 CST

如何在 bash 脚本文件中参数化我的命令?

  • 1

编辑——不使用 bash$1变量。示例使用字段指示符:$1, $2,$3是awk输入记录字段 不幸的是,我做这个例子太快了,把例子弄混了。

我相信这是一个普遍的问题。我awk用作演示工具。目的是将 ( awk) 脚本参数暗示到awk(或任何工具)命令中。

我们使用从 STDIN 到提供的字段awk来产生结果。标识符$1, $2,$3是awk来自 STDIN 流的字段。

所需的解决方案 A(首选概念),例如...

#!/bin/bash  -f
#   script: blue.sh
#
    awk -e '{ print $1 " and " $2 " silly example" ;}'
#

以及所需的输出:

$  echo  "red blue yellow" > ./blue.sh 
red and blue silly example
$

备选方案 B 可能被认为是:

#!/bin/bash  -f
#   script: green.sh
#
    wrk="awk -e '{ print \$3 \" and \" \$2 \" variable example\" ;}'  "
#
    echo "work is:"
    echo $wrk
    echo
    $wrk

以及所需的输出:

$  echo  "red blue yellow" > ./green.sh 
wrk is:
awk -e '{ print $3 " and " $2 " variable example" ;}'  

yellow and blue variable example
$

问题出在表达式的引用中-e。

有没有办法实现这两个例子?

bash quoting
  • 2 个回答
  • 180 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve