簡體   English   中英

將 sed 命令行字符串作為變量傳遞給 bash

[英]Passing sed command line string to bash as variable

我有一個 bash 腳本,它使用一個多行 sed 命令來更改文件。 從命令行,此行有效:

sed -e '1a\' -e '/DELIMITER="|" \' -e '/RESTRICT_ADD_CHANGE=1 \' -e '/FIELDS=UPDATE_MODE|PRIMARYKEYVALUE|PATRONFLAGS' -e '1 d' general_update_01 > general_update_01.mp

我對各種文件使用相同的 bash 腳本。 因此,我需要將來自發送應用程序的所有 sed 命令作為單個參數傳遞給 bash 腳本。 但是,當它從應用程序傳入時,我只得到-e。

在 bash 腳本中,我嘗試了多種方法將變量作為完整字符串接收。 這些都不存儲變量。

sed_instructions=$(echo $6)
sed_instructions=$6
sed_instructions=$(eval "$6")

以及其他一些配置。

我的命令行會使用這樣的變量:

sed $sed_instructions $filename > $filename.mp

我假設您像這樣調用您的 shell 腳本

script.sh -e '1a' -e '/DELIMITER="|" ' -e '/RESTRICT_ADD_CHANGE=1 ' -e '/FIELDS=UPDATE_MODE|PRIMARYKEYVALUE|PATRONFLAGS' -e '1 d' general_update_01

您在這里要做的是將第 n 個參數存儲為文件名,並將前 n-1 個參數存儲在數組中

#!/usr/bin/env

n=$#
filename=${!n}
sed_commands=("${@:1:n-1}")

# Now, call sed
sed "${sed_commands[@]}" "$filename" > "${filename}.mp"

為了演示該代碼的實際作用:

$ set -- one two three four
$ n=$#
$ filename=${!n}
$ args=("${@:1:n-1}")
$ declare -p filename args
declare -- filename="four"
declare -a args=([0]="one" [1]="two" [2]="three")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM