标签: parameter

如何在shell中的参数中转义<或>?

我想grep与包含该<字符的 PCRE 表达式一起使用。Bash 认为我想重定向,但我不想。我怎样才能逃脱<

shell parameter quoting escape-characters

10
推荐指数
1
解决办法
2万
查看次数

/proc/sys 中的 Linux 内核参数记录在哪里?

我在哪里可以找到/proc/sys(ob Linux) 中列出的内核参数的技术说明?

linux kernel documentation parameter linux-kernel

9
推荐指数
2
解决办法
2789
查看次数

是否可以直接在 CLI 中使用 shell 参数变量 ($1, ..., $@)?

有时需要在小例子中模拟和验证上述变量,然后可以立即复制到某些脚本等。

我试图通过以下方式使用一个简单的例子来解决:

(find $1) /tmp
sh -c '(find $1) /tmp'
sh -c "find $1" /tmp
echo '(find $1) /tmp' | sh
Run Code Online (Sandbox Code Playgroud)

以及其他组合。还通过添加 shebang 解释器指令进行了试验#!/bin/sh -x,但没有得到预期的结果。

我可以简单地做到这一点吗?

shell parameter

9
推荐指数
2
解决办法
2433
查看次数

在 Bash 数组上使用参数替换

我有 file.txt 需要读入 Bash 数组。然后我需要删除每个条目中的空格、双引号和除第一个逗号之外的所有内容。这是我已经走了多远:

$ cat file.txt
10,this
2 0 , i s
30,"all"
40,I
50,n,e,e,d,2
60",s e,e"

$ cat script.sh
#!/bin/bash
readarray -t ARRAY<$1
ARRAY=( "${ARRAY[@]// /}" )
ARRAY=( "${ARRAY[@]//\"/}" )
for ELEMENT in "${ARRAY[@]}";do
    echo "|ELEMENT|$ELEMENT|"
done

$ ./script.sh file.txt
|ELEMENT|10,this|
|ELEMENT|20,is|
|ELEMENT|30,all|
|ELEMENT|40,I|
|ELEMENT|50,n,e,e,d,2|
|ELEMENT|60,se,e|
Run Code Online (Sandbox Code Playgroud)

除了逗号情况外,这很好用。我知道有多种方法可以给这只猫剥皮,但由于脚本较大,这是其中的一部分,我真的很想使用参数替换来到达这里:

|ELEMENT|10,this|
|ELEMENT|20,is|
|ELEMENT|30,all|
|ELEMENT|40,I|
|ELEMENT|50,need2|
|ELEMENT|60,see|
Run Code Online (Sandbox Code Playgroud)

这可以通过参数替换吗?

bash array parameter shell-script variable-substitution

9
推荐指数
5
解决办法
3511
查看次数

有没有办法从bash中的函数内部获取脚本的位置参数?

以下变量用于获取位置参数:

$1, $2, $3, etc.
$@
$#
Run Code Online (Sandbox Code Playgroud)

但是它们用于脚本的位置参数和函数的位置参数。

当我在函数内使用这些变量时,它们会给出函数的位置参数。

有没有办法从函数内部获取脚本的位置参数?

bash parameter shell-script function

8
推荐指数
2
解决办法
3520
查看次数

shell 语法“[ ${1:0:1} = '/' ]”(参数扩展)有什么作用?

我不明白这个脚本。

getopt_simple()
{
    echo "getopt_simple()"
    echo "Parameters are '$*'"
    until [ -z "$1" ]
    do
        echo "Processing parameter of: '$1'"
        if [ ${1:0:1} = '/' ]
        then
            tmp=${1:1} # Strip off leading '/' . . .
            parameter=${tmp%%=*} # Extract name.
            value=${tmp##*=} # Extract value.
            echo "Parameter: '$parameter', value: '$value'"
            eval $parameter=$value
         fi
         shift
    done
}
Run Code Online (Sandbox Code Playgroud)

if [ ${1:0:1} = '/' ]在上面编写的代码之后我需要一些帮助,我的问题是:

  1. if 语句中发生了什么?
  2. “:”在这里象征什么?

shell parameter

7
推荐指数
1
解决办法
3248
查看次数

位置参数中的分词

考虑以下示例:

IFS=:
x="a   :b"   # three spaces
echo ["$x"]  # no word splitting
# [a   :b]   # as is
echo [$x]    # word splitting 
# [a    b]   # four spaces
Run Code Online (Sandbox Code Playgroud)

分词识别单词"a "(三个空格)和"b",用冒号分隔,然后echo用中间的空格连接单词。
但是,当使用 的值$x作为函数参数时,我发现很难解释结果。

args(){ echo ["$*"];}
args a   :b  # three spaces
# [a::b]
Run Code Online (Sandbox Code Playgroud)

和:

args(){ echo [$*];}
args a   :b  # three spaces
# [a  b]     # two spaces
Run Code Online (Sandbox Code Playgroud)

$*扩展为所有位置参数组合的值。此外,"$*"相当于"$1c$2",其中c是 IFS 变量值的第一个字符。

args(){ …
Run Code Online (Sandbox Code Playgroud)

parameter variable-substitution arguments variable bash-expansion

7
推荐指数
1
解决办法
1029
查看次数

使用 POSIX 参数扩展从变量中删除重复的字符串模式

我想使用2.6.2 参数扩展从字符串中删除前导字符,但惊讶地发现“删除最大前缀模式”不会自动重复该模式。

$ x=aaaaabc
$ printf %s\\n "${x##a}"
aaaabc
Run Code Online (Sandbox Code Playgroud)

如您所见,只有第一个a已被删除。预期输出为、、或中bc的任何一个。x=bcx=abcx=aabcx=aaabcx=aaaabc

a如果我想从 的开头删除尽可能多的内容,我正在努力弄清楚如何编写该模式$x。我也没有运气搜索其他线程,因为许多答案都使用 bash,但我正在寻找 POSIX shell 解决方案。

scripting parameter shell-script posix variable

7
推荐指数
3
解决办法
592
查看次数

是否可以打印命令以便可以解析输出以创建相同的命令?

这个问题听起来可能很复杂,但事实上并非如此!考虑:

% f() { echo "$@"; }
% f a
a
% f cmd -o"value with space"
cmd -ovalue with space
% f cmd -ovalue with space
cmd -ovalue with space
% f cmd -o'value with "quotes"'
cmd -ovalue with "quotes"
% f cmd -ovalue with "quotes"
cmd -ovalue with quotes
Run Code Online (Sandbox Code Playgroud)

显然,“带空间的值”只是一个参数的属性丢失了;同样,双引号在重新输入时也会被“吃掉”。

所需的输出是可以再次用作输入以产生相同输出的输出。

我不认为 BASH 中内置了允许这样做的东西,对吧?

澄清

如果我想要做什么并不明显:我有一个存储在 shell 数组中的命令,并且我想将这样的数组打印到标准输出,以便用户可以复制并粘贴输出以在 shell 提示符(或script),以便重现数组中的相同命令。

考虑这个(愚蠢的)例子:

> X=(echo "Bob's car is named \"Bobby\"")
Run Code Online (Sandbox Code Playgroud)

一个普通的echo "${X[@]}"会输出

echo 鲍勃的车名为“鲍比”

一种可能的正确输出可能是

echo …

bash parameter quoting

7
推荐指数
2
解决办法
630
查看次数

函数调用者位置参数

我需要读取和写入$@函数调用者的位置参数。Bash 手册页说:

shell 函数是一个对象,它像一个简单的命令一样被调用,并使用一组新的位置参数执行一个复合命令

所以$@在每次调用时都会重写。我寻找了一些“特殊参数”,但一无所获。shell 变量BASH_ARGV似乎解决了我的问题,但是它需要shopt -s extdebug启用,在我的机器中不是默认行为,也不是在生产中打开的选项。

extdebug
    If set, behavior intended for use by debuggers is enabled:
    ...
    4.     BASH_ARGC and BASH_ARGV are updated as described in their
           descriptions above.
    ...
Run Code Online (Sandbox Code Playgroud)

Bash 是否能够在$@没有 的情况下读取或写入函数的调用者BASH_ARGV?您是否认为 Bash 受到限制并使用另一个 shell 进行脚本编写?

编辑:我想要getopt在我的助手库中使用一个精美的包装器。所以与它相关的所有行为都在一个函数中。无需检查错误或set --.

shell bash parameter function shopt

6
推荐指数
1
解决办法
1201
查看次数